有关DOM的捕获与冒泡事件机制

102 阅读1分钟

Dom事件机制

事件的机制主要分为两种,事件捕获和事件冒泡,规定浏览器应该同时支持两种调用顺序,首先是按照捕获的顺序寻找有无监听函数,然后再按照冒泡的顺序寻找有无监听事件

1.事件捕获

  • 从外向内找监听函数,叫事件捕获

2.事件冒泡

  • 从内向外找监听函数,叫事件冒泡 !如图所示

由开发者自己选择将监听函数放在部捕获阶段还是冒泡阶段

  • 主要调用的就是addEventListener(eventType,fn,bool)这函数,该函数有三个参数,第一个参数是事件类型,如'click'点击事件,第二个参数是函数,最重要的就是第三个参数,如果不传第三个参数或者值为falsy,则表示在冒泡阶段监听,若值为true则在捕获阶段里监听。下面举个例子
  <!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>             
      .parent {
        position: relative;
        background-color: red;
        border: 1px solid;
        padding: 50px;
      }
      .child {
        position: relative;
        background-color: blue;
        width: 100px;
        height: 100px;
      }
    </style>
  </head>
  <body>
    <p>演示在添加事件监听时冒泡与捕获阶段的不同。</p>
    <div id="div1" class="parent">
      <div id="myDiv1" class="child">请点击,我是冒泡</div>
    </div>
    <br />
    <div id="div2" class="parent">
      <div id="myDiv2" class="child">请点击,我是捕获</div>
    </div>
    <script>
      document.querySelector("#myDiv1").addEventListener(
        "click",
        function () {
          alert("你点击了 蓝色!");
        },
        false
      );
      document.querySelector("#div1").addEventListener(
        "click",
        function () {
          alert("你点击了 红色!");
        },
        false
      );
      document.querySelector("#myDiv2").addEventListener(
        "click",
        function () {
          alert("你点击了 蓝色!");
        },
        true
      );
      document.querySelector("#div2").addEventListener(
        "click",
        function () {
          alert("你点击了 红色!");
        },
        true
      );
    </script>
  </body>
</html>

代码演示的结果是div1是冒泡事件,div2是捕获事件