【问题标题】:How do you detect when HTML5 audio has finished playing (more than once)? [duplicate]您如何检测 HTML5 音频何时播放完毕(不止一次)? [复制]
【发布时间】:2023-03-06 04:37:01
【问题描述】:

我在检测标签何时播放完 mp3 时遇到问题。当我做这样的事情时:

     myAudio.addEventListener("ended", function() 
     {
          alert("ended");
     });

仅在第一次播放音频时发生。当我再次播放音频时,没有任何反应。当我使用onended=doThis(); 方法时也会发生同样的事情。我听说在 jQuery 中可能有一种方法可以做到这一点,但我无法让它工作。我还听说有一种方法可以通过在每次播放 mp3 时更改音频 div id 来修复它,但这对我不起作用,因为我需要 id 保持不变。

有人有什么想法吗?

【问题讨论】:

  • jsfiddle.net/MvzFN/2 (see/listen in chrome): 在这个小提琴中,oneneded 事件似乎总是被触发
  • 尝试在 html 中而不是在 javascript 中创建音频标签。它仍然对你有用吗?
  • 是的,它仍然有效:jsfiddle.net/MvzFN/3
  • @AndersonGreen 这不是重复的,另一个答案显示了 OP 已经在使用的方法并就特定行为寻求帮助

标签: javascript jquery html audio


【解决方案1】:

ended 事件是基于.currentTime 属性创建的。 http://w3c.github.io/html/semantics-embedded-content.html#eventdef-media-ended

因此,您只需将.currentTime 再次设置为零即可。

myAudio.addEventListener("ended", function(){
     myAudio.currentTime = 0;
     console.log("ended");
});

【讨论】:

  • 做到了!但我也不得不在那之前暂停它,否则它只会是一个无限循环
  • 我试过这个,但对我来说没有用。虽然我发现在每次播放之前重新添加事件侦听器对我有用。我正在使用 Tizen Web 所以 api 所以不确定这是否是导致它对我不同的原因。但认为值得一提。
  • 我在使用 Tizen 时发现的另一件事。使用这种方法并不能保证函数的效果会在媒体结束后发生,它们并不总是在媒体实际结束后发生。最好将 onended 放入 html 标记中,因为这是我可以让它按预期工作的唯一方法。
猜你喜欢
  • 1970-01-01
  • 2013-03-12
  • 2012-03-09
  • 1970-01-01
  • 1970-01-01
  • 2014-07-04
  • 1970-01-01
  • 2011-12-12
  • 2011-06-04
相关资源
最近更新 更多