2012-02-24 10 views

ответ

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

Аудиокассета имеет свойство paused. Если он не приостановлен, значит, он играет.

+0

Поскольку нет остановки, это чистое решение. –

+3

Что делать, если он никогда не начинался? – Harry

+0

Тогда 'paused' истинно, поэтому' isPlaying() 'возвращает false. –

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

Должен сделать трюк.

-2

Хотя нет метода, называемого isPlaying или чего-то подобного, есть несколько способов этого.

Этот метод получает% прогресса, как аудио воспроизведения:

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

Если процент больше 0 и меньше чем 100, он играет, иначе она будет остановлена.

+0

Эмм, что, если я приостанавливаю звук в середине? –

+1

Тогда он не будет играть. –

+0

Это только определяет уровень буферизации. Если, например, аудио-элемент начал буферизацию данных, но не начал играть, потому что у него недостаточно данных, этот метод все равно может вернуть true. Или, если элемент буферизовал данные как часть воспроизведения и впоследствии был приостановлен. – dhasenan

22

Вы можете проверить продолжительность. Он воспроизводится, если продолжительность составляет более 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. 

} 
+1

Лично я считаю, что '! MyAudio.paused ||! MyAudio.currentTime' будет лучше работать. – m93a

+5

@ m93a Вы не имеете в виду '! MyAudio.paused || myAudio.currentTime'? – MalcolmOcean

+1

Да, должно быть '! MyAudio.paused || myAudio.currentTime'. Никогда не ответил, кажется ... – Parth

2

Попробуйте эту функцию! аудио воспроизведения не будет выполнена, если позиция начало или окончание

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

Хотя я очень поздно к этой теме, я использую эту реализацию, чтобы выяснить, если звук воспроизводится:

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.

0

Чтобы проверить, действительно ли звук начинает воспроизводиться, особенно если у вас есть поток, необходимо проверить audio.played.length на 1. Это будет 1, только если звук действительно начинает звучать. В противном случае будет 0. Это больше похоже на взлом, но он все еще работает даже в мобильных браузерах, таких как Safari и Chrome.