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

IT技术 javascript html audio
2021-02-05 07:17:49

用于检查 html5 音频元素当前是否正在播放的 javascript api 是什么?

6个回答
function isPlaying(audelem) { return !audelem.paused; }

Audio 标签有一个paused属性。如果它没有暂停,那么它正在播放。

监听事件!addEventListener('playing', func) 和 addEventListener('pause', func)。
2021-03-29 07:17:49
根据HTML Living StandardW3C HTML5 规范,“该paused属性表示媒体元素是否暂停。该属性最初必须为真”。也许@Harry 和@Tomas 在 2012 年发现情况并非如此,因为当时规格尚不清楚。但是......我在规范中找不到任何内容(并不是说它不存在!)说'paused'属性在播放结束时必须为真。有什么意见吗?
2021-03-29 07:17:49
这是错误的答案。我只是在使用它,在第一次开始之前 .​​paused 是假的。
2021-03-31 07:17:49
@Harry 我更多地玩弄它,似乎在某些浏览器中它确实有效,而有些则无效。我想这取决于实现。但是对于 chrome 和 firefox 的所有最新更新似乎都有效,所以这个答案对于最新的实现是正确的。
2021-04-02 07:17:49
@Tom 你有 jsbin 吗?我试过了,这似乎是正确的答案。
2021-04-03 07:17:49

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

}
我个人认为这样!myAudio.paused||!myAudio.currentTime会做得更好。
2021-03-18 07:17:49
@m93a 你不是说!myAudio.paused || myAudio.currentTime吗?
2021-03-19 07:17:49
是的,应该是!myAudio.paused || myAudio.currentTime好像一直没回...
2021-03-28 07:17:49

虽然我对这个线程真的很晚,但我使用这个实现来确定声音是否正在播放:

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 自动暂停,则不起作用。
2021-03-23 07:17:49
document.getElementsByTagName('audio').addEventListener('playing',function() { myfunction(); },false); 

应该做的伎俩。

getElementsByTagName('audio')[0] 因为它返回的是集合,而不是一个元素
2021-03-15 07:17:49

试试这个功能!如果位置是开头或结尾,则不会执行音频播放

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