我正在开发一个集成在我的网络应用中的音频播放系统。这正是我需要做的:创建声音文件,建立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
}
所以最终,我唯一的问题是如何在Audio对象中强制触发事件“canplaythrough”?
P.S。如果你想知道,我正在制作一个游戏的音频系统,逐个加载所有声音文件,然后启动该级别。想法是加载文件,或者如果浏览器不支持任何文件,则将它们留空。在任何情况下,事件必须触发添加到列表中的每个文件,否则它将永远等待。
答案 0 :(得分:3)
要手动触发事件,您必须使用Event
DOM API,它们不仅仅是元素的方法。这可能有用(未经测试):
sound.dispatchEvent(new Event('canplaythrough'))
该方法在IE中称为fireEvent
。
以下是相关文档:
答案 1 :(得分:0)
您是否正在尝试触发自定义事件?如果是这样,您可以使用event.initEvent初始化一个活动,然后使用dispatchEvent来启动它。
答案 2 :(得分:0)
您可以在大多数浏览器中使用dispachEvent
功能,如下所示:
sound.dispachEvent(new Event("canplaythrough"))
虽然这不是完全跨平台的,但考虑到IE,您必须使用fireEvent
:
sound.fireEvent(new Event("canplaythrough"))
要将它们放在一起,您可以使用以下内容:
(sound.dispatchEvent||sound.fireEvent)(new Event("canplaythrough"))