美文网首页
js中event事件对象

js中event事件对象

作者: 松鼠症患者 | 来源:发表于2017-08-30 16:00 被阅读0次

    在js中有一个专门的事件对象,来对事件进行操作:
    event:当事件发生时,与事件有关的信息存储在一个临时的地方-event对象里面.供我们随时调用
    event对象的方法:
    clientX:鼠标距离页面可视区域左边的距离,相应的Y为上边的距离

    事件流里的事件冒泡现象:
    首先,试想冒泡是什么意思,在沸水里冒泡泡,物质从一个介质中提炼出来进入另一个介质,这就是冒泡现象
    那么事件冒泡就是当一个元素接受到事件时,会把它接收的所有信息传给父级,一直到顶层window,这种现象为事件冒泡机制.

    认识一下事件:事件的存在并不受事件函数的影响,比如无论div元素是否绑定了onclick事件,当你点击div时,点击这个事件已经存在了
    ,只是如果未绑定事件函数的话,什么也不会发生而已.

    冒泡会解决很大一部分重复操作,但是有时候需要某个元素脱离事件流,不参与冒泡所以在要阻止的事件函数中添加event.cancelBubble=true;语句,cancelBubble意为取消冒泡.例:

    oBtn.onclick=function(){
      var ev=ev||event; 这是为兼容性考虑
      ev.cancelBubble=true;  阻止oBtn点击事件的冒泡现象;
    }
    

    接下来学习另外一种绑定事件函数的方法:

    首先我们掌握的绑定事件函数的方法为:
    obj.onclick=function(){};
    但当我们需要绑定多个函数为点击事件时就会出现问题

    obj.onclick=function fn1(){};
    obj.onclick=function fn2(){};
    

    这样写,fn2会覆盖fn1,二者不能共存,所以出现第二种方法可以使多个函数共存,但是第二种绑定存在兼容性问题:

    ie:obj.attachEvent("on"+事件名称,事件函数)

    1.没有捕获
    2.事件名称必须加"on"
    3.事件函数的执行顺序:ie 678为倒序执行,即先执行写在下面的函数,ie9以后为正序.
    4.this指向Window(即在使用this时,事件函数相当于绑定到了Window)

    w3c:obj.addEventListenner(事件名称,事件函数,是否捕获);
    1.有捕获 默认false为冒泡 true为捕获
    2.事件名称没有"on"
    3事件顺序只有正序
    4.this指向当前对象(正常)

    例子:

    function ok(obj,evname,fn){                           定义三个参数,接下来的函数中要用
    
      绑定事件函数存在兼容性问题,所以用if:
    
      if(obj.addEventListenner){ 
        obj.addEventListenner(evname,fn1,false);         w3c浏览器
        obj.addEventListenner(evname,fn2,false);
      }else{
        obj.attachEvent(     "on"+evname , function(){fn1.call(obj);  在该事件函数中添加这句解决this问题}   ); 在ie,由于this指向有问题,所以用call修正为obj
        obj.attachEvent(     "on"+evname , function(){fn2.call(obj);}                                       );
        };
    
    }
    

    如上,第二种绑定事件函数的方法可以使fn1和fn2共存,但执行顺序ie和w3c有所不同.

    call方法为function函数的一种原生方法,就像数组里的push一样.
    call意为调用函数:fn()==fn.call() 这两个是完全一样的,但call更为强大,使用call调用函数时可直接传参,其中第一个参数可以改变函数内部this的指向,从第二个参数开始就是原来的函数参数列表.如果第一个参数为null即空,则不改变this指向.

    相关文章

      网友评论

          本文标题:js中event事件对象

          本文链接:https://www.haomeiwen.com/subject/bpmtjxtx.html