Vue 阻止事件冒泡

简介: 如果想阻止哪个元素的事件冒泡(即事件只针对该元素有效),只要给该元素的事件增加.stop修饰符即可。

事件冒泡简介
如下图,当我们点击页面某个元素时,会产生点击事件,事件由外到内,逐层递进(事件捕获阶段,途中的1->2->3->4),当目标元素捕捉到目标事件时,会响应事件,并由内到外,逐层往外传递(事件冒泡阶段,图中的4->5->6->7),这便是事件冒泡。正式因为冒泡机制,当用户点击图中目标元素div时,5,6,7事件区的元素都会响应点击事件(如果具备响应事件能力的话)
s1.png

实验:

<template>

    <div>

        <div id="app" @click="fun1" style="padding:5px;border:2px solid #b7b766">

            div1

            <div @click="fun2" style="padding:5px;border:2px solid #79CDCD;">

                div2

                <div @click="fun3" style="padding:5px; border:2px solid #BEBEBE;">

                    div3

                    <div @click="fun4" style="border:2px solid #8470FF;">div4</div>

                </div>

            </div>

        </div>

    </div>

</template>

js脚本如下:

export default {
    methods: {

        fun1() {

            console.log("点击了div1");

        },

        fun2() {

            console.log("点击了div2");

        },

        fun3() {

            console.log("点击了div3");

        },

        fun4() {

            console.log("点击了div4");

        }

    }
};

实验结果如下:

s2.png

实验2

实验1的基础上,修改下代码,如下,@click ="fun3"改成@click.stop="fun3"

<div id="app" @click="fun1" style="padding:5px;border:2px solid #b7b766">

     div1

     <div @click="fun2" style="padding:5px;border:2px solid #79CDCD;">

         div2

         <div @click.stop="fun3" style="padding:5px; border:2px solid #BEBEBE;">

             div3

             <div @click="fun4" style="border:2px solid #8470FF;">div4</div>

         </div>

     </div>

 </div>

实验结果:

点击div4,输出如下:

s4.png

实验3

实验1的基础上,修改下代码,如下,@click="fun4"改成@click.stop="fun4"

<div id="app" @click="fun1" style="padding:5px;border:2px solid #b7b766">

            div1

            <div @click="fun2" style="padding:5px;border:2px solid #79CDCD;">

                div2

                <div @click="fun3" style="padding:5px; border:2px solid #BEBEBE;">

                    div3

                    <div @click.stop="fun4" style="border:2px solid #8470FF;">div4</div>

                </div>

            </div>

        </div>

实验结果:

s5.png

结论

综合实验1,2,3可知,如果想阻止哪个元素的事件冒泡(即事件只针对该元素有效),只要给该元素的事件增加.stop修饰符即可。

相关文章
|
4天前
|
缓存 监控 JavaScript
探讨优化Vue应用性能和加载速度的策略
【5月更文挑战第17天】本文探讨了优化Vue应用性能和加载速度的策略:1) 精简代码和组件拆分以减少冗余;2) 使用计算属性和侦听器、懒加载、预加载和预获取优化路由;3) 数据懒加载和防抖节流处理高频事件;4) 图片压缩和选择合适格式,使用CDN加速资源加载;5) 利用浏览器缓存和组件缓存提高效率;6) 使用Vue Devtools和性能分析工具监控及调试。通过这些方法,可提升用户在复杂应用中的体验。
15 0
|
4天前
|
JavaScript 前端开发
vue(1),小白看完都会了
vue(1),小白看完都会了
|
4天前
|
JavaScript 数据库
ant design vue日期组件怎么清空 取消默认当天日期
ant design vue日期组件怎么清空 取消默认当天日期
|
4天前
|
JavaScript C++
vue高亮显示组件--转载
vue高亮显示组件--转载
9 0
|
5天前
|
JavaScript 前端开发 数据安全/隐私保护
揭秘Vue中v-model的内部工作机制
揭秘Vue中v-model的内部工作机制
|
4天前
|
JavaScript 开发工具 git
Vue 入门系列:.env 环境变量
Vue 入门系列:.env 环境变量
10 1
|
4天前
|
JavaScript 前端开发 定位技术
Vue使用地图以及实现轨迹回放 附完整代码
Vue使用地图以及实现轨迹回放 附完整代码
Vue使用地图以及实现轨迹回放 附完整代码
|
4天前
|
JavaScript
Vue中避免滥用this去读取data中数据
Vue中避免滥用this去读取data中数据
|
4天前
|
JavaScript
vue中使用pinia及持久化
vue中使用pinia及持久化
8 0
|
4天前
|
JavaScript 前端开发 UED
Vue class和style绑定:动态美化你的组件
Vue class和style绑定:动态美化你的组件