如何处理jQuery以便只有在按住鼠标左键时才会激活mousemove事件,并且只要按钮被释放,mousemove事件就会停止?
答案 0 :(得分:5)
在这里,我绑定了mousedown上的mousemove
事件,并在mouseup
上取消绑定。我在jQuery中使用了一个很酷的功能,因此可以在此选择器中添加其他mousemove事件,但只删除了要取消绑定的事件。它们被称为Namespaced Events。
$("#yourdivid").mousedown(function(e){
if(e.which == 1){
$(this).bind('mousemove.coolnamespace', function(e){
// Your mousemove event
});
}
}).mouseup(function(e){
if(e.which == 1) $(this).unbind('mousemove.coolnamespace');
})
修改:我更新了我的答案,使用规范化字段which
。 jQuery规范化为1 =左,2 =中,3 =右。 button
值会因浏览器而异。
答案 1 :(得分:1)
简单的方法是保留一个标志,只有在按下左按钮时才设置为true。这意味着当按下鼠标左键时必须将其设置为true,并在释放时将其重置为false。然后,只有当该标志为真时才对mousemove执行操作。
这不是jQuery特定的解决方案,而是这类问题的通用模式,因此jQuery可能提供更好的解决方案。
您可能需要注意特殊情况,例如在按住左按钮时丢失输入焦点或鼠标光标移到div之外。
答案 2 :(得分:0)
绑定mousedown事件并在该函数内部调用mousemove,并使用jQuery unbind事件来摆脱mousemove;
var $button = $("ELEMENT HERE");
$button.mousedown(function(){
$(this).mousemove(function(){
//Events here
});
}).mouseup(function(){
$(this).unbind("mousemove");
});
$button.mousedown(function(){
$(this).mousemove(function(){
//Events here
});
}).mouseup(function(){
$(this).unbind("mousemove");
});