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

Har*_*rry 110 javascript audio html5

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

Nie*_*sol 138

function isPlaying(audelem) { return !audelem.paused; }
Run Code Online (Sandbox Code Playgroud)

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

  • 这是错误的答案.我正在使用它,并在第一次启动之前.paused是假的. (21认同)
  • 如果它从未开始怎么办? (6认同)
  • @Harry我正在玩它更多,似乎在某些浏览器中它确实有效,而有些则没有.我想这取决于实施.但是对于chrome和firefox的所有最新更新似乎都有效,所以这个答案对于最新的实现是正确的. (3认同)
  • 监听事件!addEventListener('播放', func) 和 addEventListener('暂停', func)。 (3认同)
  • 根据 [HTML Living Standard](https://html.spec.whatwg.org/multipage/media.html#dom-media-paused) 和 [W3C HTML5 规范](https://www.w3. org/TR/html50/embedded-content-0.html#htmlmediaelement), “`paused` 属性表示媒体元素是否暂停。该属性最初必须为 true”。也许 @Harry 和 @Tomas 在 2012 年发现情况并非如此,因为当时的规范尚不清楚。但是......我在规范中找不到任何内容(并不是说它不存在!),表明播放结束时“暂停”属性必须为真。有什么看法吗? (3认同)
  • @Tom你有一个jsbin?我试过这个似乎是正确的答案. (2认同)
  • 我在chrome中运行它并不起作用 (2认同)

Max*_*ali 35

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

}
Run Code Online (Sandbox Code Playgroud)

  • @ m93a你不是说`!myAudio.paused || myAudio.currentTime`? (7认同)
  • 是的,应该是`!myAudio.paused || myAudio.currentTime`.从来没有回复似乎...... (3认同)
  • 我个人认为 `!myAudio.paused||!myAudio.currentTime` 会做得更好。 (2认同)

Has*_*mud 12

虽然我对这个帖子的确很晚,但是我使用这个实现来判断声音是否正在播放:

service.currentAudio = new Audio();

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

我认为音频元素上的大多数标志都是明显的,除了你可以在这里阅读的就绪状态:MDN HTMLMediaElement.readyState.


pro*_*att 11

document.getElementsByTagName('audio').addEventListener('playing',function() { myfunction(); },false); 
Run Code Online (Sandbox Code Playgroud)

应该做的伎俩.

  • `getElementsByTagName('audio')[0]` 因为它返回集合,而不是一个元素 (2认同)

小智 5

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

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