美文网首页
一文搞懂js事件中的冒泡和捕获

一文搞懂js事件中的冒泡和捕获

作者: 七分暖 | 来源:发表于2022-06-18 23:34 被阅读0次

首先我们应该要明白DOM事件流可以分为三个阶段分别是捕获阶段,目标阶段,冒泡阶段。

假如有这三个元素

<style>
            #box2 {
                width: 500px;
                height: 500px;
                background-color: green;
            }

            #box1 {
                width: 400px;
                height: 400px;
                background-color: blue;
            }

            #box0 {
                width: 300px;
                height: 300px;
                background-color: red;
            }
        </style>
        <div id="box2">
            <div id="box1">
                <div id="box0"></div>
            </div>
        </div>

事件冒泡

事件捕获阶段就是从触发事件元素,一级一级往上找父元素触发同名事件,如果有就触发。
那么对应三面的三个元素就是会先触发id="box0"的事件然后是id="box1"的事件最后是id="box2"的事件。
为三个元素绑定上点击事件来测试一下

<script>
            document.getElementById("box2").addEventListener("click", function(e) {
                console.log("box2-on")
            }, false)

            document.getElementById("box1").addEventListener("click", function(e) {
                console.log("box1-on");
            }, false)
            document.getElementById("box0").addEventListener("click", function(e) {
                console.log("box0-on");
            }, false)
</script>
页面如下: 界面
点击红色区域之后控制台会依次打出 控制台结果
说明默认情况下事件的触发是绑定在冒泡阶段的。

事件捕获

事件捕获阶段就是从最顶级的父元素一级一级往下找子元素触发同名事件,直到触发事件的元素为止。
那么对应三面的三个元素就是会先触发id="box2"的事件然后是id="box1"的事件最后是id="box0"的事件。
之前以及了解过了事件的触发是在冒泡阶段那该如何将事件的触发设置在捕获阶段呢?
其实只要是通过addEventListener(event,fn,useCapture)函数绑定的方法就可以设置为捕获的触发方式,该函数的第三个参数useCapture为是否使用捕获方式触发事件,其默认值为false,那么只要设置为true即可。
设置代码如下:

    <script>
        document.getElementById("box2").addEventListener("click", function(e) {
                console.log("box2-on")
            }, true)
        document.getElementById("box1").addEventListener("click", function(e) {
                console.log("box1-on");
            }, true)
        document.getElementById("box0").addEventListener("click", function(e) {
                console.log("box0-on");
            }, true)
        </script>
接着点击最里面的元素,控制台就会打印出 控制台结果

阻止事件的传播

有些情况下面在真实的开发环境中会需要阻止事件的冒泡或者捕获,这时候就该使用到事件对象中的stopPropagation()函数了。
代码如下:

<script>
        document.getElementById("box2").addEventListener("click", function(e) {
                console.log("box2-on");
            }, true)
        document.getElementById("box1").addEventListener("click", function(e) {
                console.log("box1-on");
                e.stopPropagation();//添加该语句阻止事件继续传播
            }, true)
        document.getElementById("box0").addEventListener("click", function(e) {
                console.log("box0-on");
            }, true)
        </script>

结果如下:


控制台结果

则说明冒泡传播到id="box1"这一层的时候就停止往下传播了。

相关文章

  • JS事件相关基础

    js事件: 键盘事件: JS中的事件冒泡和事件捕获: 1、事件冒泡。如下代码: 点击button事件,连同父元素绑...

  • 一文搞懂js事件中的冒泡和捕获

    首先我们应该要明白DOM事件流可以分为三个阶段分别是捕获阶段,目标阶段,冒泡阶段。 假如有这三个元素 事件冒泡 事...

  • js 阻止冒泡 阻止默认事件

    js冒泡和捕获是事件的两种行为,使用event.stopPropagation()起到阻止捕获和冒泡阶段中当前事件...

  • 默认事件

    js冒泡和捕获是事件的两种行为,使用event.stopPropagation()起到阻止捕获和冒泡阶段中当前事件...

  • 图解事件委托

    事件捕获和事件冒泡 说到事件委托我们就不得不提JS中事件的整个历程中的两个机制:事件捕获和事件冒泡。 然而要说这事...

  • vue 阻止事件冒泡,捕获方法

    要想了解 VUE 阻止事件冒泡和捕获方法,首先要了解一下 JS 事件和 JS 阻止事件冒泡,捕获方法 1. js ...

  • Javascript 事件代理、冒泡和捕获

    2019开工荒了两天,赶紧开始! 为什么写事件代理、冒泡、捕获,首先冒泡和捕获是js事件的核心基础,事件代理原理来...

  • 事件基础(2)

    js事件的三个阶段:捕获,目标,冒泡 IE:IE事件流是事件冒泡流 Netscape事件流是事件捕获流 IE事件...

  • js中事件捕获和事件冒泡

    其实不仅在js中,在面向对象的编程语言中或多或少涉及到这个问题。js编程的事件全解,你可以到我的主页,这里给你重点...

  • js中的事件冒泡和事件捕获

    他们是描述事件触发时序问题的术语。 事件捕获指的是从document到触发事件的那个节点,即自上而下的去触发事件。...

网友评论

      本文标题:一文搞懂js事件中的冒泡和捕获

      本文链接:https://www.haomeiwen.com/subject/mxmlvrtx.html