zoukankan      html  css  js  c++  java
  • 屏蔽鼠标事件——避免双击触发2次单击或单击触发事件冒泡

    背景:

    问题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%; 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:单击阻止默认事件

  • 相关阅读:
    Java HashMap存储问题
    <转>堆和栈的区别
    Linux shell命令
    DNS(三)DNS SEC(域名系统安全扩展)
    DNS (二)协议
    绕过CDN查找网站真实IP方法
    stream流思想应用
    http接口实现附件对接
    AQS深入分析
    AQS快速入门
  • 原文地址:https://www.cnblogs.com/wheatCatcher/p/11268793.html
Copyright © 2011-2022 走看看