5.事件流

如果有一个事件,当这个事件发生后,就会开始执行一个流程,分为三个阶段,捕获、目标、冒泡,这个流程称之为事件流

捕获阶段

在事件发生时,从最外层向目标元素寻找的一个过程
window → document → html → body → ... → 目标元素的父级 → 目标元素

目标阶段

找到目标元素之后,如果该元素身上有事件处理函数,则它会执行事件处理函数(这里不分冒泡和捕获,只分代码的先后顺序,谁在前,就先执行谁)

btn.addEventListener('click',function(){
    console.log('捕获阶段');
},true);
btn.addEventListener('click',function(){
    console.log('冒泡阶段');
},false);
//这段代码在点击以后,控制台输出的顺序是 1.'捕获阶段' 2.'冒泡阶段'
btn.addEventListener('click',function(){
    console.log('冒泡阶段');
},false);
btn.addEventListener('click',function(){
    console.log('捕获阶段');
},true);
//这段代码在点击以后,控制台输出的顺序是 1.'冒泡阶段' 2.'捕获阶段'

冒泡阶段

从目标元素的上一层开始往外层寻找的一个过程
目标元素 → 目标元素的父级 → ... → body → html → document →window

注意

不论是捕获阶段还是冒泡阶段,在寻找目标元素还有向外返回的过程中,所遇到的每一个元素,如果它们身上有相同事件,那么它们的事件处理函数都会被调用

即如果通过click事件触发了事件流的形成,那么在捕获或者冒泡阶段(除去目标元素),碰到的任何具有click事件的元素,它们身上的事件处理函数都会执行
但是这里会存在一个执行阶段的问题:
碰到的具有click事件的元素,如果它的click事件是由addEventListener( , ,false)或者on来添加的,那么则会在冒泡的过程中,执行这个函数
碰到的具有click事件的元素,如果它的click事件是由addEventListener( , ,true)来添加的,那么则会在捕获的过程中,执行这个函数

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • JavaScript 程序采用了异步事件驱动编程模型。在这种程序设计风格下,当文档、浏览器、元素或与之相关的对象发...
    劼哥stone阅读 5,025评论 3 11
  • 事件绑定的方式 给 DOM 元素绑定事件分为两大类:在 html 中直接绑定 和 在 JavaScript 中绑定...
    Bruce_zhuan阅读 4,655评论 0 6
  • 以下文章为转载,对理解JavaScript中的事件处理机制很有帮助,浅显易懂,特分享于此。 什么是事件? 事件(E...
    jxyjxy阅读 8,161评论 1 10
  • 事件是一种异步编程的实现方式,本质上是程序各个组成部分之间的通信。DOM支持大量的事件,本节介绍DOM的事件编程。...
    周花花啊阅读 3,736评论 0 3
  • 之前都是在微博中干些这样的事,经朋友推荐简书,于是就来看看。说实话,一进来看到满屏幕的鸡汤文,觉得好像不怎么适合我...
    两好三坏cy阅读 1,495评论 0 0