Javascript 对象 - 强制触发事件
Javascript object - force an event to fire
我正在开发集成在我的网络应用程序中的音频播放系统。这正是我需要做的:创建一个声音文件,建立 oncanplay 通事件,然后加载源 URL。如果浏览器不支持 mp3 文件,请仍然触发 oncanplay 通事件(是的,即使文件根本没有加载)。
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 对象中触发?
附言如果你想知道,我正在为一个游戏制作一个音频系统,一个接一个地加载所有声音文件,然后启动关卡。这个想法是加载文件,或者如果浏览器不支持其中任何一个,则将它们留空。在任何情况下,事件都必须为添加到列表中的每个文件触发,否则它将永远等待。
要手动触发事件,您必须使用 Event
DOM API,它们不仅仅是元素的方法。这可能有效(未经测试):
sound.dispatchEvent(new Event('canplaythrough'))
该方法在IE中称为fireEvent
。
以下是相关文档:
- https://developer.mozilla.org/en/DOM/element.dispatchEvent
- https://developer.mozilla.org/en/DOM/DOM_event_reference(媒体元素事件没有类型...
您是否正在尝试触发自定义事件?如果是这样,您可以使用 event.initEvent 初始化事件,然后使用 dispatchEvent 触发它。
您可以在大多数浏览器中使用 dispachEvent
函数,如下所示:
sound.dispachEvent(new Event("canplaythrough"))
这不是完全跨平台的,所以要考虑到IE,你必须使用fireEvent
:
sound.fireEvent(new Event("canplaythrough"))
要将它们放在一起,您可以使用以下内容:
(sound.dispatchEvent||sound.fireEvent)(new Event("canplaythrough"))
相关文章:
- 如何从jQuery的事件对象中检索属性
- 如何在JavaScript中基于事件对象获取文件名
- 如何避免在这种情况下修改事件对象
- 如何在事件处理程序中获取 javascript 事件对象
- 如果在设置侦听器之前触发了 DOMContentLoaded 事件,如何检索“事件”对象
- addEvent 给出空事件对象
- 修改鼠标事件对象的“目标”以进行事件委派
- 如何将参数传递给backbone.js中事件对象中绑定的函数
- 从ng重复奇数内部的ng点击访问事件对象
- 如何从 React 中的事件对象访问自定义属性
- 如何将事件对象传递给对象中的函数
- 正在发送事件对象
- 是否可以获得“”的事件对象;当前“;或“;最后一个“;事件,而不将其作为处理程序中的参数接收
- 如何将事件对象字符串化
- 通过angular传递关于事件预防的信息;s事件对象
- Javascript事件对象:其中是选择器
- Meteor.js:如何检索事件对象的父元素的数据属性
- JavaScript 如何重新识别事件对象变量
- 事件对象在此代码中的工作原理
- 是为响应 DOM 事件而创建的多个事件对象