事件是与DOM交互的最常见方式,但他们也可以用于非DOM代码中,称为自定义事件,看上去有点node的event的味道。虽然说是非DOM代码,但它的存在也算是为DOM服务了。
概念
自定义事件的概念是创建一个管理事件的对象,让其他对象监听那些事件。
基本模式
function EventTarget(){
this.handlers = {};
}
EventTarget.prototype = {
constructor:EventTarget,
addHandler:function(type,handler){
//添加自定义事件类型,并推入类型对应的事件,无限添加。
if(this.handlers[type]== " undefined "){
this.handlers[type] = [];
}
this.handlers[type].push(handler)
},
fire : function(event){
if(!event.target){
event.target = this;
}
if(this.handlers[event.type] instanceof Array){
// 触发handlers中所有放进去的方法,参数为event
var handlers = this.handlers[event.type];
for (var i =0,i < handlers.length; i++){
handlers[i](event);
}
}
},
removeHandler:function(type, handler){
if(this.handlers[event.type] instanceof Array){
//根据传入的事件类型,移除队列中对应的事件
var handlers = this.handlers[type];
for (var i =0,i < handlers.length; i++){
if(handlers[i]===handler){
break
}
}
handlers.splice(i, 1);
}
}
};
网友评论