js中event事件对象

2017-08-30  本文已影响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指向.

上一篇下一篇

猜你喜欢

热点阅读