javascript之事件冒泡与事件捕获

事件冒泡是DOM事件传播的一种机制。当一个事件发生在某个元素上,事件会从触发元素开始,逐级向上传播到根元素。

具体例子

html 复制代码
<div class="div1" onclick="print('div1')">
        div1
        <div class="div2" onclick="print('div2')">
            div2
            <div class="div3" onclick="print('div3')">
                div3
                <div class="div4" onclick="print('div4')">
                    div4
                </div>
            </div>
        </div>
    </div>

这是一个div嵌套div的案例,每个div都绑了事件,对应的回调函数如下

javascript 复制代码
function print(name) 
        {
            console.log(name)
        }

函数作用是点击时输出自己对应的div标签

具体css代码如下

css 复制代码
 div {
            border:1px solid black;
        }

        .div1 {
            width: 200px;
            height: 200px;
        }

        .div2 {
            width:150px;
            height:150px;
        }

        .div3 {
            width:100px;
            height:100px;
        }

        .div4 {
            width:50px;
            height:50px;
        }

具体效果图如下

在点击div4标签时

可以看出不仅div4的事件触发,其父元素div3,div2,div1事件都触发了

事件捕获

定义:

事件捕获是JavaScript中事件传播的一个阶段,发生在事件冒泡之前。在DOM树结构中,事件从最外层的祖先元素开始,逐级向下传递到目标元素。这种机制允许在事件到达目标之前进行拦截或处理。

事件捕获通过addEventListener方法的第三个参数设置为true来启用事件捕获。

还是上面的div案例,每个div加个id

html 复制代码
 <div class="div1" id="div1">
        div1
        <div class="div2" id="div2">
            div2
            <div class="div3" id="div3">
                div3
                <div class="div4" id="div4">
                    div4
                </div>
            </div>
        </div>
    </div>

js代码如下

javascript 复制代码
         function $(id)
        {
            return document.getElementById(id)
        }

$('div1').addEventListener('click',function()
            {
                console.log('div1')
            },true)
            $('div2').addEventListener('click',function()
            {
                console.log('div2')
            },true)
            $('div3').addEventListener('click',function(event)
            {
                console.log('div3')
                event.stopPropagation() //阻止事件的传播
            },true)
            $('div4').addEventListener('click',function()
            {
                console.log('div4')
            },true)

可以看出addEventListener多了第三个参数,默认是false,是事件冒泡,true是事件捕获

相关推荐
ZC跨境爬虫8 小时前
跟着 MDN 学 HTML day_6:(HTML文本语义标签全解+lang属性)
前端·ui·html·edge浏览器
小爬的老粉丝8 小时前
把 Office 预览搬进浏览器:一次仍在继续的纯前端长跑
前端·typescript·docx·ppt·doc·pptx·office预览
Dxy12393102168 小时前
CSS的伪类简介
前端·css
Rust研习社8 小时前
Rust 高性能内存缓存 moka 完全指南
开发语言·后端·缓存·rust
鸟儿不吃草8 小时前
Android Java 自定义TextView点击取词,类似百度翻译的点击一段英文中的某个单词,可以显示点击了哪个单词
android·java·开发语言
wefg18 小时前
【C语言】用 C 语言实现多态
c语言·开发语言
小智社群8 小时前
获取贝壳新房列表
前端·javascript·vue.js
threelab8 小时前
Three.js 动态旋转同心圆着色器 | 三维可视化效果
开发语言·javascript·着色器
奶茶树8 小时前
【STL/数据结构】哈希表和unordered系列容器的封装
开发语言·c++·散列表