Javascript 对象 - 强制触发事件

标签 javascript html events audio

我正在开发一个集成在我的网络应用程序中的音频播放系统。这正是我需要做的:创建一个声音文件,建立 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”?

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

最佳答案

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

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

该方法在 IE 中称为 fireEvent

以下是相关文档:

关于Javascript 对象 - 强制触发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11044500/

相关文章:

php - 如何创建带有返回 URL 的 Facebook 共享链接?

javascript - 模态3个主要问题

javascript - CSS隐藏表格并显示tr

redirect - Electron:阻止/取消页面导航

javascript - 长字横向溢出时减小字体大小

javascript - 使用 jQuery 通过其 ID 属性选择 HTML 元素

html - 来自 sprite 的中心背景图像

html - 如何底部对齐 div 行中的所有元素?

javascript - HTML 的 'onclick' 是否适用于移动设备?

javascript - 组件之间的 React 生命周期事件顺序有哪些保证?