事件对象:event

  1.常用事件:onclick(点击)  onmouseenter(鼠标进入)  onmouseover(鼠标悬浮)  onmouseleave(鼠标离开)  onfocus(表单聚焦)  onblur(表单失去焦点)  onmouseout(鼠标移出)  onmousemove(鼠标移动)  onmousedown(鼠标按下)  onmouseup(鼠标抬起)  onchange(表单内容修改)  浏览器加载完成(onload)  计数器(count)

  2.每个元素身上的事件都是天生存在的,不需要我们去定义,只需要我给这个事件绑定一个方法,当事件触发的时候,就会执行这个方法

  3.事件绑定的写法:

  1.div.onclick=function(){}    dom0级事件

  2.div.addEventListener或者div.attachEvent      dom2级事件

  写法上二者的区别

  1.onclick这个元素的属性是私有的   而  addEventListener()是公有的属性 从EventTarget(事件源)继承来的   ie低版本attachevent也是公有的

  2.div.onclick存在事件冒泡机制,没有捕获

    div.addEventListener可有冒泡,可有捕获;

    div.attachEvent 只有冒泡,没有捕获;  

  4.div.addEventListener和div.attachEvent的区别?

    1.前者有冒泡和捕获机制,后者只有冒泡机制;

    2.事件名前者不带on,后者带on

    3.前者this指向当前元素,后者指向window

    4.前者是标准浏览器,后者ie8以下

  案例:

  var div=document.getElementById("div")

  div.onclick=function(){

    console.log(arguments)

    }

  上面控制台arguments数组有一个元素叫mouseevent

  arguments(参数):

  每个函数都有一个arguments对象,他是这个函数,所有参数构成的集合

  所以每个事件的方法中浏览器都给它一个参数叫mouse event,我们所有的鼠标信息在这个mouse event上 

  1.event兼容性:声明不一样

  标准浏览器声明为undefined        IE声明为null          火狐无法识别(会报错)

  解决办法:

  div.onclick=function(ev){

    var ev=ev||window.event

    }

  clientX和clientY的兼容性是鼠标离浏览器窗口左上角的坐标距离

  pageX和pageY他是鼠标到网页(文档)左上角的距离坐标,但是IE低版本没有这个属性,在IE下怎么算pageY的值,用clientY+scrollTop

  2.事件源,点击哪个元素,哪个元素就是事件源

  事件源的兼容:

  标准浏览器的事件源是ev.target    ie低版本(5-8)不识别这个属性,但是ie有ev.srcElement这个属性和target差不多

  3.阻止事件冒泡的兼容性(之前的版本有,现在没有了,仅供了解)

  第一种:ie低版本的写法为event.cancelBubble=true;       标准浏览器的写法为:event.stoppropagation(现在标准浏览器也支持了event.cancel Bubble的写法)

  他的兼容性写法为:event.stoppropargation?event.stopropagation:event.cancelBubble;

  阻止事件默认行为的兼容性:

  4.阻止事件默认行为的兼容性:

  比如  a的href

  href为空,会自动刷新页面

  href为#,  锚点跳转

  href为JavaScript:; 阻止默认行为的发生    

  (以上是a标签阻止浏览器的默认行为,但也有别的事件会有默认行为)

  标准浏览器:

  event.preventDefault()

  ie低版本的写法:

  event.retrunValue

  兼容性的写法为event.preventDefault()?event.preventDefaulf():event.returnValue;

  事件委托:

  委托就是利用事件冒泡(所有的dom操作离不开事件)

  如果子元素身上绑定大量相同的事件,我们尽量采用事件委托,所有子元素把自己的子元素委托给父级

  传统的for循环绑定事件会增加大量的dom操作(事件)影响页面性能,采用事件委托就把所有事件基于一个元素上

  事件委托的原理:采用事件冒泡机制完成的

  2.事件委托和传统事件绑定的优势?

  传统事件对新增元素不起作用,事件委托起作用

  传统事件绑定,有多少元素,js就绑定多少事件,事件委托,只需要一个事件

  并不是所有事件都存在事件冒泡:

  onmouseenter(鼠标进入)  onmouseleave(鼠标离开)就没有事件冒泡

  所以我们做跟随鼠标的时候,尽量用者两个事件