JavaScript中的跨浏览器事件操作的基本方法整理
绑定事件
EU.addHandler=function(element,type,handler){
//DOM2级事件处理,IE9也支持
if(element.addEventListener){
element.addEventListener(type,handler,false);
}
elseif(element.attachEvent){
//type加'on'
//IE9也可以这样绑定
element.attachEvent('on'+type,handler);
}
//DOM0级事件处理步,事件流也是冒泡
else{
element['on'+type]=handler;
}
};
取消绑定事件
和绑定事件的处理基本一致,有一个注意点:
传入的handler必须与绑定事件时传入的相同(指向同一个函数)
EU.removeHandler=function(element,type,handler){
if(element.removeEventListener){
element.removeEventListener(type,handler);
}
elseif(element.attachEvent){
element.detachEvent('on'+type,handler);
}
else{
//属性置空就可以
element['on'+type]=null;
}
};
跨浏览器添加事件
functionaddEvent(obj,type,fn){
if(obj.addEventListener){
obj.addEventListener(type,fn,false);
}elseif(obj.attachEvent){//IE
obj.attchEvent('on'+type,fn);
}
}
跨浏览器移除事件
functionremoveEvent(obj,type,fn){
if(obj.removeEventListener){
obj.removeEventListener(type,fn,false);
}elseif(obj.detachEvent){//兼容IE
obj.detachEvent('on'+type,fn);
}
}
跨浏览器阻止默认行为
functionpreDef(ev){
vare=ev||window.event;
if(e.preventDefault){
e.preventDefault();
}else{
e.returnValue=false;
}
}
跨浏览器获取目标对象
functiongetTarget(ev){
if(ev.target){//w3c
returnev.target;
}elseif(window.event.srcElement){//IE
returnwindow.event.srcElement;
}
}
跨浏览器获取滚动条位置
//跨浏览器获取滚动条位置,sp==scrollposition
functiongetSP(){
return{
top:document.documentElement.scrollTop||document.body.scrollTop,
left:document.documentElement.scrollLeft||document.body.scrollLeft;
}
}
跨浏览器获取可视窗口大小
functiongetWindow(){
if(typeofwindow.innerWidth!='undefined'){
return{
width:window.innerWidth,
height:window.innerHeight
}
}else{
return{
width:document.documentElement.clientWidth,
height:document.documentElement.clientHeight
}
}
},