4

我试图在我的游戏中有一个加载进度条,并且我有一个分配给onloadeddata我的音频属性的函数,但它没有在 Chrome 中触发。它适用于其他浏览器。我还尝试了许多其他事件,例如oncanplay, oncanplaythrough,onloadedmetadata等。它们都不会触发。

我认为这可能与缓存有关。试着环顾四周,2-3 年前有一些关于此的报道,但最近没有。

有没有其他方法可以检测音频是否已加载或使这些事件起作用?

编辑:这是一个简单的例子:http: //jsfiddle.net/3vxCu/1/ 适用于 Opera 和 Firefox,但不适用于 Chrome。如果完成加载,它应该在发出声音时发出警报。

4

2 回答 2

8

似乎该onloadeddata属性由于某种原因不起作用。addEventListener但通过(或通过 jQuery)附加事件处理程序有效:http: //jsfiddle.net/3vxCu/4/

bgSound = new Audio();
bgSound.src = "http://www.ehsankia.com/hawkthorne/audio/level.ogg";
bgSound.preload = "auto";
// Standard browsers (not IE before version 9):
// bgSound.addEventListener("loadeddata", testFunction, false);

// jQuery:
$(bgSound).on("loadeddata", testFunction);

function testFunction () {
    alert("Data loaded");
}
于 2012-05-28T23:04:59.697 回答
3

如果附加的 jsfiddle 是您实现代码的方式,那么我想我知道出了什么问题。

您的 jsfiddle 显示:

bgSound = document.createElement('audio');
bgSound.src = "http://www.ehsankia.com/hawkthorne/audio/level.ogg";
bgSound.onloadeddata = testFunction;

function testFunction(){
    alert("Data loaded");
}

它应该是这样的:

bgSound = document.createElement('audio');
bgSound.onloadeddata = testFunction; // Event listener is attached _before_ loading the resource
bgSound.src = "http://www.ehsankia.com/hawkthorne/audio/level.ogg";

function testFunction(){
    alert("Data loaded");
}

基本上,您在指定之后附加事件侦听src。指定源应该是您做的最后一件事,因为它会启动一切。当 Chrome 附加到您的代码中时,它可能已经超过了为该事件调用侦听器的时间。

于 2012-05-28T23:00:51.397 回答