拖拽drag时,mouseup与click事件冲突

解决方案:

首先我们可以解决最简单的一种,就是不拖拽的情况下触发只是触发click。
1、按照刚才的说法,mouseup事件后click必定会触发,但是如果没有发生拖拽,也就是没有触发mousemove事件,这种情况比较简单,我们可以用一个变量纪录是否触发mousemove,在mouseup的时候只触发发生拖拽的情况。
2、还有一种比较复杂的情况,就是在发生了拖拽的情况下如何避免click的触发?这个时候我们用一个定时去控制一个全局变量,让这个变量在200毫秒之后发生改变,因此mouseup之后click很快就触发了,不到200ms,因此可以保证变量还没有发生变化,click事件里面去检测这个变量,如果是变化之前,那么不执行。具体代码如下:

//mouseup事件里定时改变一个变量
window.mouseup_click_debug = true;
setTimeout(function() {
     window.mouseup_click_debug = false;
}, 200);
//click事件里去检测这个变量是否发生改变,如果没改变,说明mouseup刚执行完,这里不执行
if(window.mouseup_click_debug) {
     return false;
}

转自:http://www.qiutianaimeili.com/html/page/2018/09/5c9jxp7u6ng.html

你可能感兴趣的:(Javascript)