这取决于您的目标浏览器及其当前 W3C 工作草案 HTML5 规范“媒体元素”部分的实现。
您可以随时在此处检查您所针对的浏览器是否支持某些事件:http: //www.w3.org/2010/05/video/mediaevents.html
否则,如果数据没有通过,那么我相信音频不会被缓冲并且stalled
事件会触发。
如果数据正在通过,那么您应该能够检查suspend
orprogress
事件,这两个事件都应该在数据被缓冲时触发(但不一定是暂停/播放)。
如果这些事件没有触发是因为浏览器不支持它们,您总是可以networkState
使用计时器检查音频元素的属性,这实际上会告诉您音频是否正在缓冲:
HTML:
<!DOCTYPE html>
<html>
<body>
<audio controls="controls" id="myAudio">
<source src="http://www.w3schools.com/html5/horse.ogg" type="audio/ogg">
Your browser does not support the audio element.
</audio>
</body>
</html>
Javascript:
var audioElement = document.getElementById('myAudio');
var checkNetworkStateTimer = setInterval(function () {
console.log(audioElement.networkState); //2 indicates NETWORK_LOADING state
}, 250);
同样在 jsFiddle:http: //jsfiddle.net/3sdhj/2/
由于 jsFiddle 上的示例音频太短,您可能无法重现 a networkState
of ,但您明白了。2
如果仍然失败,我会使用流行的 HTML5 音频库,例如SoundJS
,Buzz
或soundmanager2
(我绝不隶属于这些库)。