HTML5检查音频是否正在播放?


Answers:


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

音频标签具有一个paused属性。如果未暂停,则正在播放。


由于没有停止,这是一个干净的解决方案。
托德·摩西

11
如果它从未开始怎么办?
哈里

30
这是错误的答案。我正在使用它,并且在第一次启动.paused之前是错误的。
托马斯2012年

2
@汤姆你有一个jsbin吗?我试过了,这似乎是正确的答案。
哈里

3
@Harry我正在更多地使用它,似乎在某些浏览器中它确实起作用,而在某些浏览器中却没有。我想这取决于实现。但是,对于chrome和firefox的所有最新更新,它似乎都可以正常工作,因此,此答案对于最新的实现是正确的。
托马斯2012年

43

您可以检查持续时间。如果持续时间超过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 2014年

11
@ m93a不是!myAudio.paused || myAudio.currentTime吗?
MalcolmOcean 2014年

5
是的,应该是!myAudio.paused || myAudio.currentTime。似乎从来没有回头……
Parth 2016年

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;
}

我认为audio元素上的大多数标志都很明显,除了可以在这里阅读的ready状态: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.length1。仅当音频确实是开始声音时才为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 2012年

1
然后它将不会播放。
托德·摩西

这仅检测缓冲量。例如,如果音频元素已开始缓冲数据但由于没有足够的数据而尚未开始播放,则此方法仍可以返回true。或者,如果元素已将数据缓冲作为播放的一部分,然后被暂停。
dhasenan

getElementsByTagName('myVideo')吗?我认为应该是getElementById('myVideo')
Lucky Soni

2
Em ...为什么要烦恼?一个好主意,但写得不好。如何检查.paused是否正在播放实时音频(WebRTC)?仅用于缓冲区检查。不配不宜。我支持。
igorpavlov 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.