js拖拽时禁止触发单击事件的方法三种方法

当元素同时有拖拽和单击事件时,拖拽后会触发单击事件。本文介绍了三种防止这种情况的方法:1) 在mousemove中设置状态并在click中检查;2) 通过按下时间判断(150ms内为单击,超过为拖拽);3) 检查元素位置变化来区分拖拽和单击,推荐使用位置变化的方法。
摘要由CSDN通过智能技术生成

        在一个元素既有拖拽事件,又有单击事件的时候,会发现每一次拖拽后都会触发元素的单击事件,所以我们得在拖拽事件的时候屏蔽掉元素的单击事件所绑定的方法。元素拖拽和单击事件触发的顺序是mosuedown,mousemove,mouseup,click,所以就需要针对这个事件顺序在拖拽的时候屏蔽单击事件。主要有以下三种方法来在拖拽事件中屏蔽掉单击事件的执行:

1、监听mousemove事件,在mousemove中加状态,在click事件中监听该状态

        var elIsMove = false; //定义状态
        //拖拽事件
        element.onmousedown = function (evt) {

            document.onmousemove = function (evt) { //实时改变目标元素element的位置
                elIsMove = true;    //在元素移动的时候改变状态
            }
            //停止拖动
            document.onmouseup = function () {
                document.onmousemove = null;
                document.onmouseup = null;
            }
        }
        //click事件
        element.onclick = function (e) {
            if (elIsMove) {
                elIsMove = false;    //如果状态是true,则证明元素被移动过,不触发click调用的方法
                return;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值