自定义事件代码(作为全局对象)
var EventTarget = function(){
this.handlers={};
this.constructor=eventTarget;
this.addHandler=function(type,handler){
if(typeof this.handlers[type]=='undefined'){
this.handlers[type]=new Array();
}
this.handlers[type].push(handler);
};
this.removeHandler=function(type,handler){
if(this.handlers[type] instanceof Array){
var handlers=this.handlers[type];
for(var i=0,len=handlers.length;i<len;i++){
if(handlers[i]==handler){
handlers.splice(i,1);
break;
}
}
}
};
this.trigger=function(event){
if(!event.target){
event.target=this;
}
if(this.handlers[event.type] instanceof Array){
var handlers=this.handlers[event.type];
for(var i=0,len=handlers.length;i<len;i++){
handlers[i](event);
}
}
}
}
使用方法:
1. 定义事件(全局变量)
var CustonEvent = new EventTarget();
2. 监听事件
// 参数event是一个object对象,可在触发事件的时候附带参数传递过来
var DoSomething = new function(event){
alert(" 参数: " + event.param)
}
CustonEvent.addHandler("DoSomething", DoSomething);
3. 触发事件
// 触发事件,附带一个object对象的参数,type作为必填事件类型
CustonEvent.trigger({
type:"ChangeLayer"
param:"change"
});
输出结果: