html5 音频:更改 currentTime 会触发多个 canplay 事件

Posted

技术标签:

【中文标题】html5 音频:更改 currentTime 会触发多个 canplay 事件【英文标题】:html5 audio: changing currentTime fires multiple canplay events 【发布时间】:2016-09-11 14:56:45 【问题描述】:

我需要更改 html5 音频元素的偏移时间。我编写了一个函数来处理 canplay 事件并更改 currentTime 属性。

但是,似乎更改 currentTime 属性会触发事件,因此它会循环进行。当我注释掉 currentTime 更改时,它可以正常工作(即事件只触发一次)。

正确的做法是什么?这种行为发生在(至少)Firefox 和 Chrome 中。结果音乐无法正常播放

<audio id="current" src="http://www.music.helsinki.fi/tmt/opetus/uusmedia/esim/a2002011001-e02.wav" controls 
start="1000" end="2000">    
</audio>
<script>

 $('audio').bind('canplay', function(event) 
     alert("fire!");
    event.target.currentTime = 0.5;
 );
 </script>

can check it on jsfiddle, too

实际上,它似乎与 loadedmetadata 事件一起工作,但每个人都认为 canplay 更好并且兼容更多浏览器

【问题讨论】:

您可以将.bind 更改为.one - 这样它只会触发一次。 @naortor 非常感谢您!现在可以使用了 【参考方案1】:

您可以使用 .one 代替 .bind 以便仅在第一次收听时使用

$('audio').one('canplay', function(event) 
    console.log("fire!");
    event.target.currentTime = 0.5;
);

【讨论】:

以上是关于html5 音频:更改 currentTime 会触发多个 canplay 事件的主要内容,如果未能解决你的问题,请参考以下文章

html5 音频 currentTime 不起作用

HTML5 音频:设置 currentTime 然后在 iPhone 上播放自发倒带 50-100 毫秒

属性值更改后是不是起作用?

HTML5 音频元素 - 搜索滑块 - 无法在“HTMLMediaElement”上设置“currentTime”属性:提供的双精度值是非有限的

JQuery获取/设置currentTime“无线电台”

MediaPositionState 显示不正确的 currentTime