JS事件流

86 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第23天juejin.cn/post/712312…

事件流

网景公司定义了事件捕获的处理方法:从最外层document一层一层向里去找

微软公司定义了事件冒泡的方法:从最里面向外每个元素接收到事件,最后接收的是document

事件流的分类

冒泡型事件:事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发

捕获型事件:事件从最不精准的对象(document对象)开始触发,然后到最精确(也可以在窗口级别捕获事件,不过必须由开发人员特别指定)

以上两个就是所谓的事件流****

没绑定事件,但点击时,这件事情也发生了,只是因为没绑定事件,所以体现不出来

基本上所有浏览器当时事件流默认都是事件冒泡(也称之为冒泡型事件)

点击three,他收到了点击事件,但是它没绑定点击事件,就向它的父亲查看,父亲也收到了点击事件,但是它没绑定点击事件,就再次向父亲的父亲查看,收到了点击事件,one绑定了,就体现出来了,找到以后,在向body查看,在向html,在向到document结束

把事件流设置为不捕获型事件,就用事件监听绑定,第三个参数设置成true

重点理解冒泡型事件

阻止冒泡stopPropagation()

儿子触发事件,就在儿子里阻止就可以了

 

利用事件冒泡实现

事件委托(背过)

原理(也是它的实现方式):利用冒泡的原理,把事件加到父元素或祖先元素上,触发执行效果

优点:提高js性能,事件委托可以显著的提高时间的处理速度,减少内存的使用

事件委托里面基本上都有一个判断,判断触发事件的是不是这个儿子if(e.target.nodeName===’LI’)   nodeName得到的是大写的元素节点,所以要===’LI’

一打开,浏览器把for循环已经执行了,

 

给动态添加的元素身上没有事件,用for循环在绑一次,要不然就再用事件委托绑一次

给动态元素用事件委托添加事件,是因为事件绑定在了父亲身上,我们触发子元素的时候,他会冒泡向上找父亲,在我们打开浏览器的时候,ul已经有了绑定事件,我们再往里添加li时他也是ul的范畴

this是绑定了事件的那个对象

e.target是触发事件的那个对象

事件监听的使用

动态添加事件:对于新元素,每个新元素都有事件处理,这是因为是 “事件委托”绑定事件,是针对某个选择器下的某种元素,都进行事件处理,所以,只需要这些元素符合这个条件,都会进行事件处理

而动态添加元素之后无法进行事件处理,那么我们绑定事件可能用的就是for循环,因为打开浏览器循环就已经结束了,而恰好动态添加的元素是打开网页之后进行的添加,所以他没有事件处理