在Vue中,如何防止子元素的点击事件影响父元素的双击事件?

在Vue中,如何防止子元素的点击事件影响父元素的双击事件?

vue中防止子元素点击事件干扰父元素双击事件

在Vue应用中,子元素的click事件可能会干扰父元素的dblclick事件,尤其是在快速双击子元素时。本文提供两种解决方案。

问题示例:

假设有以下Vue组件:

<template>   <div @dblclick="changeFullScreen">     <div @click="showPreset"></div>   </div> </template>  <script> export default {   methods: {     showPreset(Event) {       console.log('aaaaa');     },     changeFullScreen(event) {       console.log('bbbb');     }   } }; </script>

简单使用@click.stop并不能解决问题,因为click和dblclick是不同的事件。

立即学习前端免费学习笔记(深入)”;

解决方案一:在子元素上添加空双击事件

在子元素上添加一个@dblclick事件,并绑定一个空函数,阻止双击事件冒泡

<template>   <div @dblclick="changeFullScreen">     <div @click="showPreset" @dblclick="noop"></div>   </div> </template>  <script> export default {   methods: {     noop() {},     showPreset(event) {       console.log('aaaaa');     },     changeFullScreen(event) {       console.log('bbbb');     }   } }; </script>

noop函数什么也不做,但阻止了dblclick事件向上冒泡。

解决方案二:在父元素事件处理函数中判断事件目标

在父元素的dblclick事件处理函数中,检查event.target是否为父元素本身。只有当双击事件直接作用于父元素时,才执行相应操作:

<template>   <div @dblclick="changeFullScreen">     <div @click="showPreset"></div>   </div> </template>  <script> export default {   methods: {     showPreset(event) {       console.log('aaaaa');     },     changeFullScreen(event) {       if (event.target === this.$el) {         console.log('bbbb');       }     }   } }; </script>

this.$el指向父元素的dom节点。只有当event.target与this.$el相等时,才执行console.log(‘bbbb’)。

两种方法都能有效防止子元素点击事件干扰父元素双击事件,选择哪种方法取决于具体情况和个人偏好。 第一种方法更简洁直接,第二种方法更灵活,可以根据需要在父元素双击事件中添加更多逻辑判断。

以上就是在Vue中,如何防止子元素的

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享