浅谈事件兼容性问题

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)、用一种统一的方式,就能够获取到事件对象,以及当前点击的元素对象。

总结:第一次写简书,好不习惯啊,求教怎么在上面写出开发者工具的代码,写的好了啊!奔溃!

谢谢,望大神指教!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 什么是事件: 我们可以简单的把事件理解为浏览器的感知系统。比如说:他可以感觉到用户是否点击(click)了页面、鼠...
    张松1366阅读 11,795评论 1 6
  • 事件流 事件流描述的是从页面中接收事件的顺序。事件流包括三个阶段:事件捕获阶段,处于目标阶段,事件冒泡阶段。 事件...
    练晓习阅读 1,562评论 0 0
  • DOM DOM内容主要分为四部分: 什么是DOM和节点; 获取节点; 节点操作(3种); 属性操作(3种)。 什么...
    magic_pill阅读 4,231评论 0 1
  • DOM0 事件和DOM2级在事件监听使用方式上有什么区别? DOM 0 级事件是基于元素内联属性或DOM元素命名的...
    邢烽朔阅读 2,720评论 0 0
  • 事件流: 事件流:页面接收事件的顺序。 IE定义的:事件冒泡流(由最具体的元素依次传播到DOM树的最上层的Docu...
    xiaoguo16阅读 3,728评论 0 0

友情链接更多精彩内容