window.addEventListener && window.dispatchEvent
一、标准浏览器提供了可供元素触发的方法:element.dispatchEvent(),在使用之前,需要创建和初始化,下面是具体的用法:
vue中举例:
1.通过 var event = document.createEvent("HTMLEvents"); 这个方法创建一个event对象实例
2.通过 event.initEvent("aaa", true, true); 初始化一个aaa事件,// 3个参数:事件类型,是否冒泡,是否阻止浏览器的默认行为
注意: /*属性,可以随便自己定义*/
event.name = 'hello, 我是小礼';
event.message = '我今年18岁';
3.然后通过 window.dispatchEvent(event); 方法触发自定义事件aaa
this.$nextTick(tick => {
var event = document.createEvent("HTMLEvents");
event.initEvent("aaa", true, true);
window.dispatchEvent(event);
})
4.最后在需要监听这个事件的页面,通过window.addEventListener('aaa', function(){});即可监听到事件的执行
window.addEventListener('aaa', function (event) {
console.log(event.name+','+event.message);
}, false);
//控制台就可以打印出监听的结果: hello, 我是小礼,我今年18岁
dispatchEvent大概就是这三步
下面再看看一段代码,非IE主流浏览器及IE下的事件触发器
var fireEvent = function(element,event){
if (document.createEventObject) {
// IE浏览器支持fireEvent方法
var evt = document.createEventObject();
return element.fireEvent('on'+event,evt)
} else {
// 其他标准浏览器使用dispatchEvent方法
var evt = document.createEvent( 'HTMLEvents' );
evt.initEvent(event, true, true);
return !element.dispatchEvent(evt);
}
};
document.creatEventObject()是IE创建event对象实例的方法,和document.creatEvent('HTMLEvents')在非IE主流浏览器下的作用相同,fireEvent是IE下的事件触发器,与dispatchEvent在非IE主流浏览器下作用相同。
交流
1、QQ群:可添加qq群共同进阶学习: 进军全栈工程师疑难解 群号: 856402057
2、公众号:公众号「进军全栈攻城狮」 ,对前端技术保持学习爱好者。我会经常分享自己所学所看的干货,在进阶的路上,共勉!