屏蔽鼠标事件——避免双击触发2次单击或单击触发事件冒泡

本文介绍了如何解决网页中常见的交互事件冲突问题,包括单击、双击动作冲突、单击父元素触发子元素动作以及右键菜单触发的问题,并提供了具体的JavaScript代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:

问题1.单击过快或使用双击后,会优先触发单击动作,可能出现执行多次单击动作,而规避方案就是:当出现双击动作时,不执行任何单击动作。

问题2.单击父元素,触发了子元素的单击动作:停止当前节点及所有后续节点的同类事件

问题3.右键触发了浏览器的右键菜单,如果屏蔽:父元素阻止冒泡事件

问题1的解决方案:

方案1:

var flag = true;
function clickHandle(e) {
    e = e || window.event;
    if (flag) {
        flag = false;
        //此处为要执行的函数;
        setTimeout(function() {
            flag = true;
        }, 250)
    } else {
        e.preventDefault();
    }
}

方案2:

var timer = null;
function clickHandle(e) {
    clearTimeout(timer);
    timer = setTimeout(function() { //初始化一个延时
        //此处为要执行的函数;
        // console.log(e);
    }, 250)
};
function dblclick() { //双击事件会先触发两次单击事件,然后再执行双击事件,使用清除定时器来达到双击只执行双击事件的目的
    clearTimeout(timer);
    console.log("2");
};

 问题2的解决方案:

<div :style="styleObject" @click="intercept($event)">
    <el-menu v-show="menuSelected" style="border-radius: 10%;width: 100%;" @select="onMenuSelect">
        <el-menu-item style="border-radius: 10%;border: 1px solid #ccc;height: 40px;line-height: 40px;" v-for="(v,index) in rightMenuList"
         :key="index" :index="v.value">{{ v.name }}</el-menu-item>
    </el-menu>
</div>
intercept (e) { // 阻止受到其他事件的触发
  e.stopImmediatePropagation()
}

 问题3的解决方案:

<div @click="handleClick" @contextmenu.prevent="handleContextmenu">
        <!-- 阻止事件冒泡 button冒泡到div上面去了-->
        <div @click="show(msg,$event)"> <button @click.stop="show(msg,$event)">点击我</button> <a href="https://www.baidu.com" @click.prevent.stop="show(msg,$event)">百度</a> </div>
</div>

说明:

@contextmenu.prevent : 右键阻止冒泡事件

@click.stop:单击阻止默认事件

转载于:https://www.cnblogs.com/wheatCatcher/p/11268793.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值