0

我正在开发一个集成在我的网络应用程序中的音频播放系统。这正是我需要做的:创建一个声音文件,建立 oncanplaythrough 事件,然后加载源 URL。如果浏览器不支持 mp3 文件,无论如何都会触发 oncanplaythrough 事件(是的,即使文件根本没有加载)。

var sound = new Audio();
sound.addEventListener('canplaythrough', function(){
        alert('ready to play');
    }, false);
if(sound.canPlayType('audio/mp3')){
    sound.src = "myfile.mp3";
}
else{
    // force event to fire anyway
    sound.canplaythrough(); // doesn't work (this function is undefined)
    // sound.oncanplaythrough() is "null" if I try to use that
}

所以最终,我唯一的问题是如何强制事件“canplaythrough”在音频对象中触发?

PS如果你想知道,我正在为一个游戏制作一个音频系统,它会一个一个地加载所有声音文件,然后启动关卡。这个想法是加载文件,或者如果浏览器不支持任何文件,则将它们留空。在任何情况下,必须为添加到列表中的每个文件触发事件,否则它将永远等待。

4

3 回答 3

3

要手动触发事件,您必须使用EventDOM API,它们不仅仅是元素的方法。这可能有效(未经测试):

sound.dispatchEvent(new Event('canplaythrough'))

该方法fireEvent在 IE 中被调用。

以下是相关文档:

于 2012-06-15T04:46:43.033 回答
0

您可以dispachEvent在大多数浏览器中使用该功能,如下所示:

sound.dispachEvent(new Event("canplaythrough"))

这不是完全跨平台的,但要考虑到 IE,您必须使用fireEvent

sound.fireEvent(new Event("canplaythrough"))

要将它们放在一起,您可以使用以下内容:

(sound.dispatchEvent||sound.fireEvent)(new Event("canplaythrough"))
于 2014-07-17T17:05:15.510 回答
0

您是否要触发自定义事件?如果是这样,您可以使用event.initEvent初始化一个事件,然后使用dispatchEvent来触发它。

于 2012-06-15T04:20:03.067 回答