浏览器事件机制中事件触发三个阶段?

简介: js中时间执行的整个过程称之为事件流,分为三个阶段:事件捕获阶段,事件目标处理函数、事件冒泡。当某歌元素触发某个事件(如:click),顶级对象document发出一个事件流,顺着dom的树节点向触发它的目标节点流去,直到达到目标元素,这个层层递进,向下找目标的过程为事件的捕获阶段,此过程与事件相应的函数是不会触发的。

js中时间执行的整个过程称之为事件流,分为三个阶段:事件捕获阶段,事件目标处理函数、事件冒泡。

当某歌元素触发某个事件(如:click),顶级对象document发出一个事件流,顺着dom的树节点向触发它的目标节点流去,直到达到目标元素,这个层层递进,向下找目标的过程为事件的捕获阶段,此过程与事件相应的函数是不会触发的。

到达目标函数,便会执行绑定在此元素上的,与事件相应的函数,即事件目标处理函数阶段。

最后,从目标元素起,再依次往顶层元素对象传递,途中如果有节点绑定了同名事件,这些事件所对应的函数,在此过程中便称之为事件冒泡。

通常情况下,事件相应的函数四在冒泡阶段执行的。addEventListener的第三个参数默认为false,表示冒泡阶段执行(为true的时候,表示捕获阶段执行)。

使用e.stopPropgation()或e.cancelBubble = true(IE)可以阻断事件向当前元素的父元素冒泡。

img_4d8bb186014acb1c2f8cca7d071e06e1.png
冒泡阶段阻止默认事件

以上是在冒泡阶段触发事件,但是由于最内层的元素阻止了默认事件,所以导致冒泡事件无法产生。

img_9ccf4f616129dbaf5153ecce0f52bc9f.png
捕获阶段阻止默认事件
img_a9e7627b21e250b641953d6d0e4755c7.png
捕获阶段阻止默认事件的结果
img_dc84355a7965391af95e8db8fa0e3126.png
混用
img_7c2bf5d24330d0445e571700b26085de.png
混用结果

前三个结果是事件捕获阶段执行函数输出的没在捕获阶段,是从最高节点开始,但凡绑定了clik事件,便会执行;之后进入冒泡阶段,由于div[1]身阻止了事件冒泡,因此它的父级div[0]的click事件是不会触发的,事件到div[1]便结束了。

如果把阻止冒泡的行为添加在捕获阶段,如捕获阶段的div[1]身上,则只会依次输出捕获过程中触发click事件时div[0]、div[1]的函数执行结果,之后的捕获行为和冒泡行为将全部被阻断。

img_e7f72aa075f7d31b388f1584f4243838.png
img_362e1ee9cfa4c507a06ea512a70b4780.png
相关文章
|
5月前
|
JavaScript 开发者
什么是浏览器环境下事件的 Propagation
什么是浏览器环境下事件的 Propagation
|
5月前
|
Web App开发 前端开发
Chrome 浏览器插件 V3 版本 Manifest.json 文件中 Action 的类型(Types)、方法(Methods)和事件(Events)的属性和参数解析
Chrome 浏览器插件 V3 版本 Manifest.json 文件中 Action 的类型(Types)、方法(Methods)和事件(Events)的属性和参数解析
216 0
|
2月前
|
编解码 JavaScript 前端开发
JS逆向浏览器脱环境专题:事件学习和编写、DOM和BOM结构、指纹验证排查、代理自吐环境通杀环境检测、脱环境框架、脱环境插件解决
JS逆向浏览器脱环境专题:事件学习和编写、DOM和BOM结构、指纹验证排查、代理自吐环境通杀环境检测、脱环境框架、脱环境插件解决
61 1
|
2月前
|
JavaScript API
VUE——监听浏览器关闭及标签页关闭事件
VUE——监听浏览器关闭及标签页关闭事件
97 0
|
3月前
|
JavaScript 前端开发 开发者
浏览器事件机制详解
浏览器事件机制详解
35 1
|
3月前
|
JavaScript
vue 组件封装 | 随鼠标移动的信息框 (含监听鼠标移动、移出事件,获取元素的宽高、获取浏览器的宽高)
vue 组件封装 | 随鼠标移动的信息框 (含监听鼠标移动、移出事件,获取元素的宽高、获取浏览器的宽高)
40 1
|
3月前
|
前端开发 JavaScript
js 进入浏览器全屏(F11效果)、退出全屏、指定元素全屏、判断当前是否全屏、监听浏览器全屏事件、定义全屏时的css样式(全屏伪类)
js 进入浏览器全屏(F11效果)、退出全屏、指定元素全屏、判断当前是否全屏、监听浏览器全屏事件、定义全屏时的css样式(全屏伪类)
282 0
|
5月前
|
JavaScript 前端开发
js阻止浏览器默认事件和防止事件传播事件
js阻止浏览器默认事件和防止事件传播事件
70 3
|
5月前
|
JavaScript 开发者
什么是浏览器环境下的 Event Propagation(事件传播)
什么是浏览器环境下的 Event Propagation(事件传播)
|
5月前
|
Web App开发 移动开发 JavaScript
【Vue版】实现拖拽、排序效果(注意,这个方法在chrome谷歌浏览器上面不适用,dragend会情不自禁触发drag事件先执行,有点像浏览器的一个bug)
【Vue版】实现拖拽、排序效果(注意,这个方法在chrome谷歌浏览器上面不适用,dragend会情不自禁触发drag事件先执行,有点像浏览器的一个bug)