//绑定事件
function addEvent(obj, type, fn) {
if(typeof obj.addEventListener != 'undefined') {
obj.addEventListener(type, fn, false);
} else {
//创建一个存放事件的哈希表
if(!obj.events) obj.events = {};
//第一次执行时执行
if(!obj.events[type]) {
//创建一个存放事件处理函数的数组
obj.events[type] = [];
//把第一次的事件处理函数先存储到第一个位置上
if(obj['on' + type]) obj.events[type][0] = fn;
}else{
//同一个注册函数进行屏蔽,不添加到计数器中
if(addEvent.equal(obj.events[type], fn)) return false;
}
//从第二次开始我们用事件计数器来存储
obj.events[type][addEvent.ID++] = fn;
//执行事件处理函数
obj['on' + type] = addEvent.exec;
}
}
addEvent.ID = 1;
//执行事件处理函数
addEvent.exec = function(event) {
var e = event || addEvent.fixEvent(window.event);
var es = this.events[e.type];
for(var i in es) {
es[i].call(this, e);
}
}
//同一个注册函数进行屏蔽
addEvent.equal = function(es, fn) {
for(var i in es){
if(es[i] == fn) return true;
}
return false;
}
//把IE常用的Event对象配对到W3C中
addEvent.fixEvent = function(event) {
event.preventDefault = addEvent.fixEvent.preventDefault;
event.stopPropagation = addEvent.fixEvent.stopPropagation;
return event;
};
//IE阻止默认行为
addEvent.fixEvent.preventDefault = function() {
this.returnValue = false;
}
//IE取消冒泡
addEvent.fixEvent.stopPropagation = function() {
this.cancelBubble = true;
}
//移除事件
function removeEvent(obj, type, fn) {
if(typeof obj.removeEventListener != 'undefined') {
obj.removeEventListener(type, fn);
}else {
for(var i in obj.events[type]) {
if(obj.events[type][i] == fn) {
delete obj.events[type][i];
}
}
}
}