一丶 流

什么是流?

比如 react 中的单项数据流,Node.js 中的流,或者本文中的 DOM 事件流,都是流的具体体现。专业地讲,流是程序输入或输出的一个连续的字节序列;通俗地讲,流是有方向的数据。

二丶 事件流

什么是事件流?

假想一下,现在有一组同心圆,你把手指在最里面的圆心上,与此同时,你也正在指着外层的其他同心圆。假设最里面的圆是 DOM 中的一个按钮,那就是说,你点击按钮这个元素的同时,也点击了他的所有父级元素。那么这个点击事件 DOM 要怎么处理呢?事实上,这个点击事件并非只是简单地在被点击的元素上发生一次。那么点击事件是谁先得到通知并响应呢?

事件捕获

事件捕获就是指被点击元素的父级元素应该先接收到事件,并向下传播,就像例子中的按钮点击事件,接收到事件的元素顺序应该为 window > document > body > button.

事件冒泡

事件冒泡跟事件捕获好顺序相反,认为应该是被点击的具体元素先接受到事件:button > body > document > window.

事件阶段

当一个 DOM 事件发生时,要经历三个阶段:

1. 从文档的根节点流向目标对象 ---> 捕获阶段;

2. 在目标对象上被触发 ---> 目标阶段;

3. 回溯到文档的根节点 ---> 冒泡阶段。

三丶 卵用

通过事件监听(addEventListener(type,callback,true))在父级元素捕获事件,可以阻止事件冒泡(stopPropagation())引起的问题。

四丶总结

事件流描述的就是事件发生的顺序。

事件捕获:所谓捕获,就像是进行一场狩猎一样,以猎人(不是猎头)的角度来看,已经将猎物(发生事件的元素)活动范围(window)确定了,在外面层层包围,然后缩小包围圈,一层一层由外向内的,直至擒获猎物,即传播到事件发生的具体元素。

目标阶段:以猎物本身的角度讲,比如是一头狮子(不是攻城狮),刚开始只是被猎人们包围,但猎人并不确定自己的具体位置,直到猎人的包围圈足够小,才发现自己。这时候自己就真正成为了他们的目标。

冒泡阶段:还是以狮子角度讲,以狮子的性格,即使是困兽犹斗,也不会坐以待毙的,所以它选择突围(冒泡)。然而外面的猎人(父级元素)有很多,它要一层层地突破,直至逃离了狩猎场(window),才有资格嘲笑愚蠢的人类 0.0 。

阻止事件冒泡:然而对狮子而言,结局并不总是那么美好的,因为自嘲愚蠢的家伙 一般都很精明~ 在以上每个阶段进行的过程中,狮子都可能挂掉,假如这是一群装备精良的盗猎者,他们采用了一些空中侦察技术,并在缩小包围圈(事件捕获阶段)的过程中发现了狮子的踪迹,并用激光制导扯弹麻醉了狮子,那么他们大可以提前打卡下班看小学生打第四节比赛了。这样也就不会出现狮子突围的(冒泡阶段)经典剧情了。也就避免了狮子突围可能造成的伤亡~

就写这么多吧,没有

漫谈DOM 事件流的三个阶段的更多相关文章

  1. 理解DOM事件流的三个阶段

    本文主要解决两个问题: 1.什么是事件流 2.DOM事件流的三个阶段 事件流之事件冒泡与事件捕获 在浏览器发展的过程中,开发团队遇到了一个问题.那就是页面中的哪一部分拥有特定的事件? 可以想象画在一张 ...

  2. DOM事件流的三个阶段

    事件发生时会在元素节点之间按照特定的顺序传播,这个传播过程即DOM事件流. DOM事件流分为三个阶段,分别为: 捕获阶段:事件从Document节点自上而下向目标节点传播的阶段: 目标阶段:真正的目标 ...

  3. 关于DOM事件流、DOM0级事件与DOM2级事件

    一.DOM 事件模型 DOM 事件模型包括捕获和冒泡,捕获是从上往下到达目标元素,冒泡是从当前元素,也就是目标元素往上到 window 二.流 流的概念,在现今的 JavaScript 中随处可见.比 ...

  4. js事件捕获,事件冒泡,事件委托以及DOM事件流

    一:DOM事件流: 事件流是从页面接收事件的顺序,DOM2级事件规定事件流包括三个阶段: ①事件捕获阶段:用意在于事件达到目标之前捕获它,在事件捕获阶段事件流模型:document→html→body ...

  5. DOM事件: DOM事件级别、DOM事件流、DOM事件模型、DOM事件捕获过程、自定义事件

    前端面试中只要问到事件,就肯定会有DOM事件:如果回答出来了,就会一直向下延申,其实这些东西都很简单,但我第一次被问到的时候,也是懵的: DOM事件级别: DOM0 element.onclick = ...

  6. Js-事件分发与DOM事件流

    原文地址:https://www.jianshu.com/p/dc1520327022 Js事件分发与DOM事件流 对JavaScript分发事件不熟悉,网上查阅相关资料整理后,记录一下对Javasc ...

  7. [已转移]JavaScript事件---DOM事件流

    该文章已转移到博客:https://cynthia0329.github.io/ 事件发生时会在元素节点与根节点之间按照特定的顺序传播,路径所经过的所有节点都会收到该事件 这个传播过程即DOM事件流. ...

  8. [DOM Event Learning] Section 4 事件分发和DOM事件流

    [DOM Event Learning] Section 4 事件分发和DOM事件流 事件分发机制: event dispatch mechanism. 事件流(event flow)描述了事件对象在 ...

  9. 从click事件理解DOM事件流

    事件流是用来解释页面上的不同元素接受一个事件的顺序,首先要明确两点: 1.一个事件的影响元素可能不止一个(同心圆理论),但目标元素只有一个. 2.如果这些元素都绑定了相同名称的事件函数,我们怎么知道这 ...

随机推荐

  1. 001servlet的基本知识

    servlet的知识: l  1. servlet概念及相关接口简介 l  2. servet 执行过程 l  3. servlet路径映射 l  4. 缺省servlet          --应用 ...

  2. javascript -- 阻止默认事件 阻止事件冒泡

    1. event.preventDefault();  -- 阻止元素的默认事件.注:a元素的点击跳转的默认事件 , button,radio等表单元素的默认事件 , div 元素没有默认事件 例: ...

  3. Android SDK代理server解决国内不能更新下载问题

    读者须知:本篇文章中最靠谱的是第三种方式,近期有读者反映第三种方式也不行了,以下提供一点其它途径的开源镜像网站: 国内高校的开源镜像站 中国科学技术大学(debian.ustc.edu.cn) 上海交 ...

  4. 去死吧!USB转串口!!!

    首先,这个题目有两种歧义:1.USB转232串口(严格说就是这种)! 2.USB转USART串口(通常都是这么叫,认为就是这,理论上是错误的,歧义所在)! USB转TTL.USB转232.USB转串口 ...

  5. gomobile build

    You need to set the NDK path in gomobile init using the -ndk flag - if you follow these instructions ...

  6. KVC/KVO之暴力的KVC

    本章将分为三个部分: KVC是什么 KVC之Set/Get KVC键值路径之Set/Get KVC是什么 KVC,即 NSKeyValueCoding,一个非正式的 Protocol,提供一种机制来间 ...

  7. Window发声函数Beep、MessageBeep

     C++ Code  1234567891011   WINBASEAPI BOOL WINAPI Beep(__in DWORD dwFreq,      __in DWORD dwDuration ...

  8. WPF 渲染级别 (Tier)

    在WPF中,显卡的功能相差很大.当WPF评估显卡时,它会考虑许多因素,包括显卡上的RAM数量.对像素着色器(piexl shader)的支持(计算每个像素效果的内置程序,如透明效果),以及对顶点着色器 ...

  9. 介绍MFC框架中涉及到的设计模式(二)

    接着上一篇<介绍MFC框架中涉及到的设计模式(一)>介绍 单例模式(Singleton Pattern) 单例模式是一种经常使用的软件设计模式.在它的核心结构中仅仅包括一个被称为单例类的特 ...

  10. iOS开发之--MVC 架构模式

    随着项目开发时间的增加,从刚开始那种很随意的代码风格,逐渐会改变,现在就介绍下MVC的架构模式,MVC的架构模式,从字面意思上讲,即:MVC 即 Modal View Controller(模型 视图 ...