Перевірте HTML5, чи відтворюється аудіо?


Відповіді:


152
function isPlaying(audelem) { return !audelem.paused; }

Аудіотег має pausedвластивість. Якщо це не призупинено, то це гра.


Оскільки зупинки немає, це чисте рішення.
— Тодд Мойсей

11
Що робити, якщо це ніколи не почалося?
— Гаррі

30
Це неправильна відповідь. Я просто працюю з цим, і до першого запуску .пауза помилкова.
— Томаш

2
@Том у вас є jsbin? Я спробував це, і це здається правильною відповіддю.
— Гаррі

3
@ Гаррі, я більше розігрувався з цим, і здається, що в деяких браузерах це працює, а в деяких - ні. Я думаю, це залежить від реалізації. Але для всіх останніх оновлень для chrome та firefox це, здається, працює, тому ця відповідь правильна для останніх реалізацій.
— Томаш

44

Ви можете перевірити тривалість. Він відтворюється, якщо тривалість більше 0 секунд і не призупиняється.

var myAudio = document.getElementById('myAudioID');

if (myAudio.duration > 0 && !myAudio.paused) {

    //Its playing...do your job

} else {

    //Not playing...maybe paused, stopped or never played.

}

2
Особисто я вважаю, що це !myAudio.paused||!myAudio.currentTimeзробило б кращу роботу.
— m93a

11
@ m93a ти не маєш на увазі !myAudio.paused || myAudio.currentTime?
— MalcolmOcean

5
Так, має бути !myAudio.paused || myAudio.currentTime. Ніколи не відповів назад, здається ...
— Parth

16

Хоча я дуже спізнююся з цією темою, я використовую цю реалізацію, щоб з'ясувати, чи звучить звук:

service.currentAudio = new Audio();

var isPlaying = function () {
    return service.currentAudio
        && service.currentAudio.currentTime > 0
        && !service.currentAudio.paused
        && !service.currentAudio.ended
        && service.currentAudio.readyState > 2;
}

Я думаю, що більшість прапорів аудіоелемента очевидні, крім стану готовості, про який ви можете прочитати тут: MDN HTMLMediaElement.readyState .


Не працює, якщо аудіо було автоматично призупинено iOS під час блокування.
— shukshin.ivan

13
document.getElementsByTagName('audio').addEventListener('playing',function() { myfunction(); },false); 

Слід зробити трюк.


5

Спробуйте цю функцію! Відтворення звуку не виконується, якщо позиція є початком або кінцем

function togglePause() {
     if (myAudio.paused && myAudio.currentTime > 0 && !myAudio.ended) {
         myAudio.play();
     } else {
         myAudio.pause();
     }
}

0

Для того, щоб перевірити , якщо звук дійсно почати грати, особливо якщо у вас є потік, необхідно перевірити , audio.played.lengthщоб 1. Це буде 1, лише якщо звук справді починає звучати. Інакше буде 0. Це більше схоже на хак, але це все ще працює навіть у мобільних браузерах, як Safari та Chrome.


0

ви можете використовувати подію onplay.

var audio = document.querySelector('audio');
audio.onplay = function() { /* do something */};

або

var audio = document.querySelector('audio');
audio.addEventListener('play', function() { /* do something */ };

0

Я використовую цей код jquery за допомогою кнопки відтворення та зупинки, кнопка відтворення - кнопка відтворення та натискання кнопки

const help_p = new Audio("audio/help.mp3");//Set Help Audio Name
$('#help_play').click(function() {//pause-Play
if (help_p.paused == false) {
  help_p.pause();//pause if playing
} else {
  help_p.play();//Play If Pausing
}
});

$('#help_stop').click(function() {//Stop Button
  help_p.pause();//pause
  help_p.currentTime = 0; //Set Time 0
});

-2

Хоча не існує методу, який називається isPlaying або чогось подібного, є кілька способів досягти цього.

Цей метод отримує% прогресу під час відтворення звуку:

function getPercentProg() {
    var myVideo = document.getElementById('myVideo');
    var endBuf = myVideo.buffered.end(0);
    var soFar = parseInt((endBuf / myVideo.duration) * 100);
    document.getElementById('loadStatus').innerHTML =  soFar + '%';
}

Якщо відсоток більший за 0 і менше 100, він грає, інакше він зупиняється.


Ем, що робити, якщо я призупинив аудіо посередині?
— Niet the Dark Absol

1
Тоді це не буде грати.
— Тодд Мойсей

Це виявляє лише буферизовану кількість. Наприклад, якщо аудіоелемент розпочав буферизацію даних, але не почав відтворювати, оскільки у нього недостатньо даних, цей спосіб все одно може повернути істину. Або якщо елемент містить буферизовані дані в рамках відтворення і згодом був призупинений.
— dhasenan

getElementsByTagName ("myVideo")? я думаю, що це має бути getElementById ('myVideo')
— Lucky Soni

2
Ем ... Навіщо мінізувати? Чудова ідея, погано написана, хоча. Як ви можете перевірити, чи відтворюється аудіо в режимі реального часу (WebRTC) .pause? Тільки за допомогою перевірки буфера. Не заслужене мінізування. Я підтримую.
— igorpavlov
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.