jQuery:关于事件的问题

时间:2009-11-23 04:33:11

标签: javascript jquery javascript-events

如何处理jQuery以便只有在按住鼠标左键时才会激活mousemove事件,并且只要按钮被释放,mousemove事件就会停止?

3 个答案:

答案 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"); });