3-2 DOM 的事件机制,怎么阻止事件捕获/冒泡
什么是事件?
事件可以理解为消息,信号,事件的工作过程中,必然会产生三个概念 1. 事件源 2.事件 3.事件目标
,也就是说当 事件目标注册事件后,由事件源开始 ,发送事件信息,给到事件目标的 过程,称为事件的生命周期
DOM 中的事件机制
DOM 定义了为 Event 的事件接口,用来表示事件,我们可以通过 Event 事件接口定义一个自定义事件,并且根据需要配置,是否支持冒泡,是否能被撤销等
事件中最重要进行通信的过程,就被称为事件的捕获和冒泡,事件的铺货和冒泡是顺序相反的,也就是事件会先从顶部节点一直捕获下去,寻找到注册事件的事件目标,并触发事件目标所注册的事件,并冒泡的顶部节点
addEventListener()方法的第三个参数用来设置事件是在事件捕获时执行,还是事件冒泡时执行
我们还可以通过 addEventListener()方法的第三个参数改为 true,那么捕获阶段的事件触发,会从顶部节点往下触发,也就是,你点击触发的事件,会在最后被触发,(默认第三个参数是 false 表示,事件冒泡阶段触发)
怎么阻止事件捕获和冒泡?
- 阻止冒泡: 在 W3c 中,使用 stopPropagation() 方法;在 IE 下设置 cancelBubble = true, stopPropagation()也可以用来阻止事件捕获
- 阻止捕获: DOM3 级新增事件 stopImmediatePropagation()方法来阻止事件捕获,另外此方法还可以阻止事件冒泡
stopImmediatePropagation() 和 stopPropagation()的区别在哪儿呢?
stopPropagation 只会阻止冒泡或者是捕获。
但是 stopImmediatePropagation 除此之外还会阻止该元素的其他事件发生,但是 stopPropagation 就不会阻止其他事件的发生