Перевірте 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.