stopPropagation 与 stopImmediatePropagation的区别

stopPropagation 与 stopImmediatePropagation的区别

今天听说:通过自定义弹窗的visible希望是可控的,另外希望点击弹窗之外的内容也可以实现关闭弹窗的效果,运用了click事件的监听去改变visible,按照预想敲了代码,发现弹窗闪弹(原因:当前click设置visible为ture)了一下又关闭(原因:给document注入了click监听事件设置visible为false)了,想到用阻止冒泡事件解决,但stopPropagation并不能很好的解决这个问题,最终用stopImmediatePropagation实现。
发现:

html代码:

<div id="box">
    <div id="parent">
        <div id="son1">son1</div>
    </div>
</div>

css代码:

#box {
        width: 400px;
        height: 400px;
        margin: auto;
        background-color: violet;
}
#parent {
     width: 200px;
     height: 150px;
     background-color: aquamarine;
}
#son1 {
    width: 80px;
    height: 80px;
    float: left;
    background-color: rgb(200, 202, 42);
}

js代码:

const boxEle = document.getElementById('box');
const parentEle = document.getElementById('parent');
const son1Ele = document.getElementById('son1');
const son2Ele = document.getElementById('son2');
boxEle.addEventListener('click', (e) =>{
    console.log('click box');
})
parentEle.addEventListener('click', (e) =>{
    console.log('click parent');
})
son1Ele.addEventListener('click', (e) =>{
    console.log('click son1 fn1');
    e.stopPropagation()
})
son1Ele.addEventListener('click', (e) =>{
    console.log('click son1 fn2');
})
// 打印
// click son1 fn1
// click son1 fn2

若为

son1Ele.addEventListener('click', (e) =>{
    console.log('click son1 fn1');
    e.stopImmediatePropagation()
})
son1Ele.addEventListener('click', (e) =>{
    console.log('click son1 fn2');
})
// 打印 
// click son1 fn1

总所周知,当没有给点击的son1元素添加stopPropagation/stopImmediatePropagation时会从内而外的出发冒泡事件;从例子可看出,stopPropagation只能阻止事件冒泡到父元素,而stopImmediatePropagation既能阻止事件冒泡至父元素,还能阻止当前元素相同类型事件。另,在react中的写法为 e.nativeEvent.stopImmediatePropagation().

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值