javascript - html5音频: changing currentTime fires multiple canplay events

标签 javascript jquery html5-audio

我需要更改 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 更好并且与更多浏览器兼容

最佳答案

您可以使用 .one 而不是 .bind,以便仅在第一次收听

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

关于javascript - html5音频: changing currentTime fires multiple canplay events,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39437369/

相关文章:

javascript - Twitter typeahead - %QUERY 作为字符串传递给远程查询

javascript - 将 Nodelist 转换为 Array 并将新类附加到每个 Node

javascript - 为什么字符串索引在 JavaScript 数组中是合法的?

javascript - 无法将值绑定(bind)到 ng-model 以在事件中选择选项

javascript - 页面中特定操作的 URL

javascript - HTML audio Element 如何重播?

javascript - mouseenter 和 mouseleave 竞争问题

jquery - 在 jquery 滚动上更改一个 div 的多个 css 元素

javascript - 按顺序播放多个声音文件 仅播放最后一个声音

javascript - 尝试加载缓冲区时Recorder.js WebAudio API TypeError问题