欢迎加入QQ讨论群258996829
麦子学院 头像
苹果6袋
6
麦子学院

Javascript学习之事件库的封装详解

发布时间:2017-07-30 23:31  回复:0  查看:2138   最后回复:2017-07-30 23:31  
本文和大家分享的主要是javascript 中事件库封装相关内容,一起来看看吧,希望对大家 学习javascript 有所帮助。
  在浏览器中,对于事件的操作,兼容性主要是存在  DOM2  级事件里面,标准浏览器是通过  addEventListener()  removeEventListener()  来注册事件和绑定事件,在低级版本的  IE浏览器  里面是有对应的  attachEvent()  detachEvent()  ;再者是里面传入的事件行为,标准的不带  on   IE    on  ;接着是事件处理函数里面的  this  指向;事件重复绑定的问题,事件绑定顺序与执行顺序的问题
  //  事件绑定的元素,事件类型,事件处理函数 function  on(ele, type,fn){
  //  区分浏览器
   if(ele.addEventListener){
  ele.addEventListener( type,fn,false);//  冒泡
  } else{ // IE6-8
   if(!ele['on'+ type]){
  ele['on'+ type]=[];
  // 解决 run 被重复绑定的问题
  ele.attachEvent('on'+ type, function(){
  run.call(ele);
  })
  }
  //  去重判断,解决重复绑定的问题
   for( var i=0;i<ele['on'+ type].length;i++){
   if(a ===fn) return;
  }
  ele['on'+type].push(fn);
  }
  }//拿到"数组"中的每个方法,进行顺序调用 主要是针对IE浏览器的设置function run(){
  var e=window.event;
  //对事件对象做兼容处理
  e.target=e.srcElement; // 事件源
  e.pageX=(document.documentElement.scrollLeft||document.body.scrollLeft)+e.clientX; // clientX/Y:鼠标点击的位置距离可视区页面左上角的距离   scrollLeft:是滚动条滚动的距离(IE兼容处理),pageX/Y:鼠标在页面上的位置,从页面左上角开始,即是以页面为参考点,不随滑动条移动而变化
  e.pageY=(document.documentElement.scrollTop||document.body.scrollTop)+e.clientY;
  e.preventDefault=function(){//阻止默认事件
  e.returnValue=false;
  };
  e.stopPropagation=function(){
  e.cancelBubble=true;//阻止冒泡;
  };
  // this是指向ele
  var a=this["on"+e.type];
  if(a.length){//证明数组有长度,可以循环调用;
  for(var i=0; i<a.length; i++){
  if(typeof  a==='function'){
  a.call(this,e);//fn1 fn2 fn3
  }else{
  a.splice(i,1); // 移除
  i--; // 防止数组塌陷
  }
  }
  }
  }
  //"数组"中找到要"解除绑定"的方法,赋值为nullfunction off(ele,type,fn){
  if(ele.removeEventListener){
  ele.removeEventListener(type,fn,false);
  }else{
  //拿到数组,遍历判断,并赋值为null
  var a=ele["on"+type];
  for(var i=0; i<a.length; i++){
  if(a===fn){
  a=null;
  break;
  }
  }
  }
  }
来源:简书
您还未登录,请先登录

热门帖子

最新帖子