为什么canplaythrough事件只在我清空事件中的console.log(this)时触发?

时间:2014-11-01 02:56:27

标签: javascript html5 audio javascript-events heisenbug

我的JavaScript不会一直加载音频文件,除非我在音频对象上使用console.log

我有加载音频文件并播放的代码。

var sound;

sound = new Audio("foo.mp3");
sound.addEventListener("canplaythrough", function(){
    //Do stuff
});

canplaythrough事件每次都不会触发(我认为这意味着它没有足够的负载以允许事件触发)。由于我在一个小型游戏预加载器中使用它,所以在让游戏运行之前,我依靠这个事件来启动。

在测试期间,我使用console.log在触发以下事件时检查sound对象:emptiedloadedmetadataloadeddata,{{1} },当然还有canplay

canplaythrough

如果我对sound.addEventListener("emptied", function(){ console.log(this); }); // the same for loadedmetadata, loadeddata, and canplay events 对象的任何属性使用console.log(例如this),则没有明显的变化。

奇怪的是,只要我在console.log(this.readyState)事件监听器中的console.log对象上使用this,我就无法重现此错误;这些文件似乎每次都加载。

这是为什么?使用emptied,我是否强制要加载文件?

正在使用的代码示例。

console.log

0 个答案:

没有答案