1、兼容性
(1)语法(syntax): addEventListener(type, handler, useCapture)
type:事件类型
handler:事件处理函数
useCapture:是否在捕获阶段触发
兼容支持:ie9 以上主流浏览器。
(2) 语法(syntax):attachEvent("on" + type, hander )
type:事件类型
handler:事件处理函数
兼容支持:ie6-10。
2、初级封装
function registerEvent(ele,type,handler){
if(ele.addEventListener){
ele.addEventListener(type,handler,false);
}else if(ele.attachEvent){
ele.attachEvent("on"+type,handler);
}else{
ele["on"+type]=handler;
}
}
缺点:同一个页面里有多次注册事件,而每次调用都要判断一次浏览器的支持环境,浪费资源!
3、中级封装
function createRegister(){
if(window.addEventListener){
return function(ele,type,handler){
ele.addEventListener(type,handler,false);
}
}else if(window.attachEvent){
return function(ele,type,handler){
ele.attachEvent("on"+type,handler);
}
}else{
return function(ele,type,handler){
ele["on"+type]=handler;
}
}
}
优点:调用craeteRegister函数,并不是在注册事件,而是获取一个当前浏览器支持的注册事件的方式
var eventRegister = createRegister();
缺点:(1).事件对象的获取,要处理;
(2). this的指向问题,也要处理。
3、高级封装
function createRegister(){
if(window.addEventListener){
return function(ele,type,handler){
ele.addEventListener(type,handler,false);
}
}else if(window.attachEvent){
return function(ele,type,handler){
ele.attachEvent("on"+type,function(){
//使用一个中间函数,这样子就可以自己控制调用了,call方法将this指向我们需要的ele.
handler.call(ele,window.event);
});
}
}else{
return function(ele,type,handler){
ele["on"+type]=handler;
}
}
}
优点:(1)、使用我们封装好的eventRegister这个函数的时候,不再需要考虑浏览器的兼容性问题。
(2)、用一种统一的方式,就能够获取到事件对象,以及当前点击的元素对象。
总结:第一次写简书,好不习惯啊,求教怎么在上面写出开发者工具的代码,写的好了啊!奔溃!
谢谢,望大神指教!
网友评论