【问题标题】:Triggering an HTML5 audio track to play whenever it has loaded加载时触发 HTML5 音轨播放
【发布时间】:2011-07-05 10:56:21
【问题描述】:
我正在尝试使用 .play() JavaScript 函数在页面加载几秒钟后播放 HTML5 音轨。
有时,当音频加载缓慢时,当播放器看起来像这样时会触发 .play():
音频在缓冲时不播放。
有时,当音频加载很快并且播放器看起来像这样时,.play() 可以正常工作。
解决此问题的最快方法是什么? (使用监听器?我坚持“加载时播放”功能)。
【问题讨论】:
标签:
javascript
html
buffering
html5-audio
【解决方案1】:
这应该可以工作:
<script language="JavaScript" type="text/javascript">
var myAudio = document.getElementById('audio1')
myAudio.oncanplaythrough = function () {this.play();}
</script>
<audio id="audio1" controls preload="auto" />
<audio id="audio2" controls preload="auto" oncanplaythrough="this.play();" />
【解决方案2】:
如果加载成功,无论是使用 src 属性还是使用源元素,在下载数据时,都会触发进度事件。当加载了足够的数据以确定视频的尺寸和持续时间时,将触发 loadmetadata 事件。当加载了足够的数据以呈现帧时,将触发loadeddata 事件。当加载了足够多的数据以播放一小段视频时,就会触发一个 canplay 事件。当浏览器确定它可以播放整个视频而无需停止下载更多数据时,就会触发 canplaythrough 事件;如果视频具有自动播放属性,这也是视频开始播放的时间。
注意:Opera 10.50 不会尝试确定何时有足够的数据可以播放,而是同时触发 canplay 和 canplaythrough。这可能会在未来的版本中得到修复。
如果浏览器决定停止下载数据以节省带宽,那么它将触发暂停事件。如果服务器由于某种原因停止提供数据(没有关闭连接),那么三秒钟后浏览器会触发一个停止事件。如果浏览器的播放速度快于服务器提供数据的速度,或者当搜索导致浏览器等待下载数据时,就会触发等待事件。
注意:Opera 10.50 尚未暂停下载,也不会触发停滞事件。
如果您希望在视频能够播放之前禁用播放按钮,您可以在 canplay 事件中启用它:
<input type="button" value="Play" id="playpause" onclick="playOrPause()" disabled>
video.oncanplay = function(e) {
playpause.disabled = false;
}
Source.
【解决方案3】:
你可以设置:
<script>
var myAudio = document.getElementById('audio1');
myAudio.setAttribute('autoplay', 'autoplay');</script>