在html5音频元素到达播放结束前5秒执行Javascript代码

时间:2016-07-12 21:31:34

标签: javascript jquery html5 html5-audio

我正在使用默认的audio元素(不向用户提供控件),我正在通过jQuery进行交互(更改源代码,播放/暂停 - 通常)。现在我正试着淡入下一个音轨(第二个音频元素),提前5秒开始无缝转换。

根据我从media eventsaudio element attributes页面收集的内容,默认情况下不存在任何方法 - 最接近的事物似乎是onended事件(它也会触发)显然已经很晚了)和loop属性,它有同样的问题。

  

我将之前的尝试分成了一个答案,以便从未答复的队列中删除该问题,但最初包含在此处

任何有助于更有效地解决此问题的帮助,本身以我错过的方式或改进现有解决方案都非常有用!提前谢谢。

1 个答案:

答案 0 :(得分:1)

此时,我看到的唯一解决方案是提前检查轨道的持续时间,然后设置以下超时:

$('audio').bind('loadedmetadata', function() {
  duration = $(this).prop('duration') * 1000; // get duration in milliseconds
  var fadetimer = setTimeout(function(){
    // set up next audio file
  }, duration - 5000); // execute timeout 5 seconds before end of playback
});
然而,这对我来说似乎效率极低。我也不确定这种方法是否会留下垃圾"在后台运行的超时或事件绑定,最终会使应用程序加起来并减慢速度。