2021-05-21 事件冒泡和阻止事件冒泡

事件冒泡:
    子元素设置的事件被执行时,其所有设置了同一事件的父元素也会执行的现象

var wrap = document.querySelector(".wrap");
var box = document.querySelector(".box");
wrap.onclick = function() {console.log("我是wrap");}
box.onclick = function() {console.log("我是box");}
//输出结果:点一下box元素,其父元素wrap的输出语句也会执行

阻止事件冒泡:
    函数:stopPropogation()

//修改box.onclick如下
box.onclick = function(eve) {
    //阻止冒泡
    if (eve.stopPropogation) eve.stopPropogation();//兼容非IE
    else eve.cancelBubble = true;//兼容IE
    console.log("我是box");
}
//输出结果:点哪个元素,只输出对应的语句


onmouseover和onmouseenter的区别:
onmouseover:

 wrap.onmouseover = function() {
     console.log("我是wrap");
 }
 box.onmouseover = function() {
     console.log("我是box");
 }
//输出结果:鼠标移入box元素,其父元素wrap的输出语句也会执行

onmouseenter:

wrap.onmouseenter = function() {
    console.log("我是wrap");
}
box.onmouseenter = function() {
        console.log("我是box");
    }
    //输出结果:鼠标移入box元素,其父元素wrap的输出语句不会执行

*鼠标移出事件:onmouseout与onmouseleave同理

### 阻止 `el-slider` 组件中的 `input` 事件冒泡 为了防止 `el-slider` 中的 `input` 事件触发不必要的父级组件逻辑,可以在处理该事件的方法内部调用 `event.stopPropagation()` 来阻止事件传播。 具体实现方式如下: #### 方法一:通过自定义指令拦截事件并停止其冒泡 如果希望更优雅地控制所有类型的交互而不必修改原有业务逻辑,则可以通过创建一个新的 Vue 自定义指令来达到目的。此方法适用于需要广泛应用于多个地方的情况。 ```javascript // 定义全局指令 stop-bubble,在模板里可以直接 v-stopBubble 使用 Vue.directive('stopBubble', { bind(el) { const originalHandler = el.__vue__.$options.methods.onSliderChange; el.__vue__.$options.methods.onSliderChange = function(event){ event.stopPropagation(); if (originalHandler) { originalHandler.call(this, event); } }; } }); ``` 对于特定场景下仅需针对某个实例做特殊处理时,推荐采用第二种更为简洁的方式。 #### 方法二:直接在监听器内调用 stopPropagation() 这是最简单直接的办法,只需找到对应的输入框或滑动条元素,并在其上添加相应的事件处理器即可完成操作。 ```html <template> <!-- 假设这里是你的 Slider --> <el-slider @input.native="handleInput"></el-slider> </template> <script> export default { methods: { handleInput(e) { e.stopPropagation(); // 这样就成功阻止了 input 事件向上冒泡 console.log(`当前值为 ${e.target.value}`); }, }, }; </script> ``` 上述两种方案都可以有效地解决 `el-slider` 的 `input` 事件冒泡问题[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端OnTheRun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值