资讯专栏INFORMATION COLUMN

理解DOM事件流的三个阶段

afishhhhh / 955人阅读

摘要:本文主要解决两个问题什么是事件流事件流的三个阶段起因在学习前端的大半年来,对事件了解甚少。事件流所描述的就是从页面中接受事件的顺序。事件流事件流包括三个阶段。防止事件冒泡而带来不必要的错误和困扰。分有事件冒泡与事件捕获两种。

本文主要解决两个问题:

什么是事件流

DOM事件流的三个阶段

起因

在学习前端的大半年来,对DOM事件了解甚少。一般也只是用用onclick来绑定个点击事件。在寒假深入学习JavaScript时,愈发觉得自己对DOM事件了解不够,遂打开我的《JavaScript高级程序设计》,翻到DOM事件那一章,开始第二次学习之旅。
当然,DOM事件所囊括的知识较为庞杂,所以本文专注与自己学习时所碰到的难点,DOM事件流。

流的概念,在现今的JavaScript中随处可见。比如说React中的单向数据流,Node中的流,又或是今天本文所讲的DOM事件流。都是流的一种生动体现。
至于流的具体概念,我们采用下文的解释:

用术语说流是对输入输出设备的抽象。以程序的角度说,流是具有方向的数据。
通通连起来——无处不在的流 淘宝FED--愈之

事件流之事件冒泡与事件捕获

在浏览器发展的过程中,开发团队遇到了一个问题。那就是页面中的哪一部分拥有特定的事件?
可以想象画在一张纸上的一组同心圆,如果你把手指放在圆心上,那么你的手指指向的其实不是一个圆,而是纸上所有的圆。放到实际页面中就是,你点击一个按钮,事实上你还同时点击了按钮所有的父元素。
开发团队的问题就在于,当点击按钮时,是按钮最外层的父元素先收到事件并执行,还是具体元素先收到事件并执行?所以这儿引入了事件流的概念。

事件流所描述的就是从页面中接受事件的顺序。

因为有两种观点,所以事件流也有两种,分别是事件冒泡和事件捕获。现行的主流是事件冒泡。

事件冒泡

事件冒泡即事件开始时,由最具体的元素接收(也就是事件发生所在的节点),然后逐级传播到较为不具体的节点。
举个栗子,就很容易明白了。




  
  Event Bubbling


  

然后,我们给button和它的父元素,加入点击事件。

var button = document.getElementById("clickMe");

button.onclick = function() {
  console.log("1. You click Button");
};
document.body.onclick = function() {
  console.log("2. You click body");
};
document.onclick = function() {
  console.log("3. You click document");
};
window.onclick = function() {
  console.log("4. You click window");
};

效果如图所示:

在代码所示的页面中,如果点击了button,那么这个点击事件会按如下的顺序传播(Chrome浏览器):

button

body

document

window

也就是说,click事件首先在

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/49738.html

相关文章

  • 理解DOM事件流的三个阶段

    摘要:本文主要解决两个问题什么是事件流事件流的三个阶段起因在学习前端的大半年来,对事件了解甚少。事件流所描述的就是从页面中接受事件的顺序。事件流事件流包括三个阶段。防止事件冒泡而带来不必要的错误和困扰。分有事件冒泡与事件捕获两种。 本文主要解决两个问题: 什么是事件流 DOM事件流的三个阶段 起因 在学习前端的大半年来,对DOM事件了解甚少。一般也只是用用onclick来绑定个点击事件。...

    xiangzhihong 评论0 收藏0
  • 你真的理解事件冒泡和事件捕获吗?

    摘要:事件流是事件冒泡,而的事件流就是事件捕获。所有现代浏览器都支持事件冒泡,并且会将事件一直冒泡到对象。事件捕获的用以在于事件到达预定目标之前捕获它。事件流级事件规定事件流包括三个阶段,事件捕获阶段处于目标阶段和事件冒泡阶段。 最近在复习前端的基础,看到事件这一节的时候,刚好发现了笔记中一道特别好玩并且十分有趣的代码,根据这么一道题目,基本上能够把事件冒泡和事件捕获的盲区给扫空。本文就带你...

    Cheriselalala 评论0 收藏0
  • 你真的理解事件冒泡和事件捕获吗?

    摘要:事件流是事件冒泡,而的事件流就是事件捕获。所有现代浏览器都支持事件冒泡,并且会将事件一直冒泡到对象。事件捕获的用以在于事件到达预定目标之前捕获它。事件流级事件规定事件流包括三个阶段,事件捕获阶段处于目标阶段和事件冒泡阶段。 最近在复习前端的基础,看到事件这一节的时候,刚好发现了笔记中一道特别好玩并且十分有趣的代码,根据这么一道题目,基本上能够把事件冒泡和事件捕获的盲区给扫空。本文就带你...

    henry14 评论0 收藏0
  • 你真的理解事件冒泡和事件捕获吗?

    摘要:事件流是事件冒泡,而的事件流就是事件捕获。所有现代浏览器都支持事件冒泡,并且会将事件一直冒泡到对象。事件捕获的用以在于事件到达预定目标之前捕获它。事件流级事件规定事件流包括三个阶段,事件捕获阶段处于目标阶段和事件冒泡阶段。 最近在复习前端的基础,看到事件这一节的时候,刚好发现了笔记中一道特别好玩并且十分有趣的代码,根据这么一道题目,基本上能够把事件冒泡和事件捕获的盲区给扫空。本文就带你...

    amuqiao 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<