写一个通用的事件侦听器函数
var EventHandler = (function(){
function EventAdapter(ev){
//使用适配器包装Event对象
return {
clientX: ev.clientX,
clientY: ev.clientY,
...
//处理兼容
stopPropagation: function(){
ev.stopPropagation ? ev.stopPropagation() : ev.cancelBubble = true;
},
preventDefault: function(){
ev.preventDefault ? ev.preventDefault() : ev.returnValue = false;
},
target : ev.target || ev.srcElement,
...
}
}
//生成代理函数
function createProxy(func){
//代理函数需要做记录,便于后续卸载
window[func] = function(e){
func(EventAdapter(e))
}
return window[func];
}
return {
addEvent: function(ele, type, func){
if(ele.addEventListener){
ele.addEventListener(type, createProxy(func))
} else {
ele.attachEvent('on'+type, createProxy(func))
}
},
removeEvent: function(ele, type, func){
if(ele.addEventListener){
ele.removeEventListener(type, window[func])
} else {
ele.attachEvent('on'+type, window[func])
}
//卸载代理函数后,清除属性
delete window[func]
}
}
})()