返回

后端人员需要关注的Dom事件流的三个阶段详解

前端

好的,我已经收集了您提供的信息,现在就开始为你撰写文章。

好的,我已经收集了您提供的信息,现在就开始为你撰写文章。

相信许多人,无论是前端还是后端开发者,对于Dom事件流的三个阶段都比较陌生,或者说虽然了解,但并不是非常透彻,本篇文章将详细解析事件流的三个阶段,帮助大家从0到1彻底弄懂事件流。

目录

  1. 事件流的三阶段
  2. 事件捕获
  3. 目标阶段
  4. 事件冒泡
  5. 阻止事件传播
  6. 案例解析
  7. 总结

事件流的三阶段

事件流指的就是事件的触发过程,从事件发生到事件被处理,是一个触发、捕获、处理的顺序执行过程。在执行的过程中,事件流会经历三个阶段:捕获阶段、目标阶段、冒泡阶段。
事件流示意图如下图所示:

[图片]

事件捕获

事件捕获阶段是从根元素开始,逐级向下查找匹配的选择器,找到第一个匹配的选择器后,执行其事件处理函数,然后继续向下查找,直到找到目标元素。事件捕获阶段是自上而下的。

目标阶段

目标阶段是事件流的第二个阶段,也是唯一执行事件处理函数的阶段。当事件到达目标元素时,目标阶段就会执行。目标阶段是事件流的中心阶段。

事件冒泡

事件冒泡阶段是从目标元素开始,逐级向上查找匹配的选择器,找到第一个匹配的选择器后,执行其事件处理函数,然后继续向上查找,直到找到根元素。事件冒泡阶段是自下而上的。

阻止事件传播

如果事件流在某一个阶段被阻止,那么事件将不会再继续传播到下一个阶段。可以使用stopPropagation()方法来阻止事件传播。

案例解析

下面我们通过一个案例来详细剖析事件流的三个阶段。

<html>
<head>
  
</head>
<body>
  <div id="container">
    <div id="inner">
      <button id="button">点击我</button>
    </div>
  </div>

  <script>
    // 容器元素的点击事件处理函数
    document.getElementById('container').addEventListener('click', function(e) {
      console.log('容器元素的点击事件处理函数');
    }, true);

    // 内部元素的点击事件处理函数
    document.getElementById('inner').addEventListener('click', function(e) {
      console.log('内部元素的点击事件处理函数');
      e.stopPropagation();
    }, true);

    // 按钮元素的点击事件处理函数
    document.getElementById('button').addEventListener('click', function(e) {
      console.log('按钮元素的点击事件处理函数');
    });
  </script>
</body>
</html>

在这个案例中,我们给容器元素、内部元素和按钮元素都添加了点击事件处理函数。其中,容器元素和内部元素的点击事件处理函数都设置了capture参数为true,表示在捕获阶段执行。

当我们点击按钮元素时,事件流将经历以下三个阶段:

  1. 事件捕获阶段

    事件从根元素开始向下查找,第一个匹配的选择器是容器元素。容器元素的点击事件处理函数在捕获阶段执行,控制台输出容器元素的点击事件处理函数

  2. 目标阶段

    事件到达目标元素按钮元素,按钮元素的点击事件处理函数在目标阶段执行,控制台输出按钮元素的点击事件处理函数

  3. 事件冒泡阶段

    事件从目标元素开始向上查找,第一个匹配的选择器是内部元素。内部元素的点击事件处理函数在冒泡阶段执行,但由于我们在内部元素的点击事件处理函数中调用了stopPropagation()方法,所以事件不会继续向上传播,因此容器元素的点击事件处理函数不会执行。

总结

通过这个案例,我们可以看到事件流的三个阶段是如何工作的。事件捕获阶段是从根元素开始向下查找,目标阶段是事件流的中心阶段,事件冒泡阶段是从目标元素开始向上查找。我们可以使用stopPropagation()方法来阻止事件传播。

掌握了Dom事件流的三个阶段,对于我们的编码工作来说是非常有帮助的,希望这篇文章能够帮助你理解Dom事件流的三个阶段,并在实际工作中灵活运用。