我有一个可拖动的<div>
,它有一个click
事件,没有任何拖动事件,但是在我拖动<div>
之后,单击事件被应用到<div>
。
如何防止拖动后的点击事件?
$(function(){
$('div').bind('click', function(){
$(this).toggleClass('orange');
});
$('div').draggable();
});
我有一个可拖动的<div>
,它有一个click
事件,没有任何拖动事件,但是在我拖动<div>
之后,单击事件被应用到<div>
。
如何防止拖动后的点击事件?
$(function(){
$('div').bind('click', function(){
$(this).toggleClass('orange');
});
$('div').draggable();
});
8条答案
按热度按时间snz8szmq1#
首先附加可拖动事件,然后附加单击事件:
在这里试试:http://jsfiddle.net/aG72R/55/
am46iovg2#
使用ES6类(无jQuery)
要在javascript中实现这一点,而不需要jQuery的帮助,您可以添加和删除事件处理程序。
首先创建将在事件侦听器中添加和删除的函数
而这个用来停止一个事件上的所有事件
然后,在
mousedown
和mousemove
事件相继触发时添加该标志。记住在鼠标向上时删除它,这样我们就不会在这个元素上重复大量的事件。
最后,在元素的
mouseup
事件中,我们可以使用标记逻辑来添加和删除单击。在上面的例子中,我的目标是点击的真实的目标,所以如果这是一个滑块,我将目标图像,而不是主库
element
。要目标主要element
只需改变添加/删除事件侦听器,如下所示。结论
通过将匿名函数设置为常量,我们就不必绑定它们了,而且这样它们就有了一个“句柄”,允许从事件中移除特定的函数,而不是事件中的整个函数集。
bf1o4zei3#
我用
data
和setTimeout
做了一个解决方案。也许比助手类更好。以及
检查**fiddle**。
oymdgrw74#
这应该行得通:
DEMO
2g32fytz5#
你可以不用jQuery UI拖拽就可以做到,只需要使用常见的'click'和'dragstart'事件:
yptwkmov6#
你可以在draggable上检查jQuery UI的
ui-draggable-dragging
类,如果它在那里,就不要继续click事件,否则就继续。jQuery UI会处理这个类的设置和删除,所以你不必这样做。代码:
vd2z7a6w7#
带React
此代码适用于React用户,在鼠标释放时检查draggedRef。
我没有使用单击事件。单击事件由鼠标释放事件检查。
ddarikpa8#
我遇到了同样的问题(p5.js),我通过一个全局lastDraggedAt变量解决了这个问题,该变量在拖动事件运行时更新,在单击事件中,我只是检查最后一次拖动是否小于0.1秒。