35)

事件对象

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

事件绑定的写法:

  1---div.onclick=function(){}  (dom零级事件绑定)

  2---div.addeventlistener()    (dom二级事件绑定)

    div.attachevent()

  二者区别:

    onclick是这个元素的私有属性,天生自带的;

    addeventlistener,attachevent是公有的

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

    div.addeventlistener()有冒泡有捕获  div.attachevent()只有冒泡

arguments:

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

  arguments数组中有一个元素叫mouseevent,所有,每个事件的方法中浏览器都给他一个参数叫mouseevent

  我们所有鼠标的信息都临时存储在这个mouseevent对象上

event对象的兼容性:

  clientX clientY鼠标到浏览器窗口左上角的距离坐标

  pageX pageY 鼠标到网页左上角的距离坐标;IE低版本没有这个属性

  IE下算pageX值:clientX+scrollwidth  clientY+scrolltop

事件源:

  点击那个元素那个元素就是事件源

  var target=ev.target||ev.srcelement

阻止事件冒泡:

  ev.stoppropagation?ev.stoppropagation():ev.cancelbubble=true

阻止事件默认行为:

  ev.preventdefault?ev.preventdafault():ev.returnvalue=false

事件委托:

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

  为什么采用事件委托?

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

  原理:

    采用事件冒泡机制完成的

  事件委托和传统饿事件绑定的优势:

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

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

  onmouseenter;onmouseleave没有事件冒泡机制

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

 dom零级事件元素绑定多个click,最后只执行最后一个click(会覆盖)

 dom二级事件元素绑定多个click,都要执行;

   div.addeventlistener("click" ,fn1,false)

   div.addeventlistener("click" ,fn1,false)

注意:当绑定多个事件名,事件发生阶段,函数名,三者完全一样的时候,才执行最后一个

区别:

  dom零级绑定多个相同的事件,后者会覆盖前者;dom二级不会

  dom零级只适合普通事件,

  dom二级患有指定的事件类型(如domcontentloaded--当HTML文档结构加载完成之后执行,这个事件就是jQuery中$(document).ready())

事件取消:

  dom零级:div.onclick=null

  dom二级:div.removeeventlistener(“click” ,fn1,false)

键盘事件:

  事件:onkeydown,onkeyup

  键盘触发事件时,浏览器天生给一个方法叫keyboardevent的对象,所有键盘的信息都在这个对象上

  event有个属性可以keycode,键盘编码

    document.onkeydown=function(ev){

        var ev=ev||window.event

        console.log(ev.keycode)

    }

右击鼠标事件:

  oncontextmenu 

  

猜你喜欢

转载自www.cnblogs.com/xiaotaiyangye/p/10154806.html
35