单击时禁用鼠标移动

时间:2011-01-03 19:33:51

标签: jquery drag-and-drop

我正在尝试拖放'n',这是我的代码:

$('.box-title').live('mousedown click', function(e)
{
    var self = $(this);
    var Box = self.parent('#box');

    if(e.type == 'mousedown')
    {
        $(window).mousemove(function(e)
        {
            Box.css({ cursor: 'move', top: e.pageY - 15, left: e.pageX - 125 });
        });
    }
    else if(e.type == 'click')
    {
        Box.css({ cursor: 'default', top: e.pageY - 15, left: e.pageX - 125 });
    }
});

在mousedown上,它应该通过移动鼠标来启动拖动效果,之后如果我想停靠/放下我想要它的盒子,我点击它应该禁用移动但是如果我点击它,它不会停止移动 - 只是继续跟随我的鼠标。你怎么能停止拖动?

3 个答案:

答案 0 :(得分:8)

您需要取消绑定当前仍然附加的mousemove处理程序,例如:

function setPos(e) {
  //can be $('#box') in this case...
  $(this).parent('#box').css({ cursor: 'move', top: e.pageY - 15, left: e.pageX - 125 });
}    
$('.box-title').live('mousedown click', function(e) {
    if(e.type == 'mousedown') {
        $(window).mousemove(setPos);
    }
    else if(e.type == 'click') {
        $(window).unbind('mousemove', setPos);
    }
});

或者,在jQuery 1.4.3+中,.live()处理程序可以更清晰一点:

$('.box-title').live({
  mousedown: function() {
    $(window).mousemove(setPos);
  },
  click: function() {
    $(window).unbind('mousemove', setPos);
  }
});

顺便说一下,它出现你在页面中有多个id="box"个元素...请确保在这些情况下使用类,在此代码中$(this).parent('#box')将是而是$(this).closest('.box')

答案 1 :(得分:3)

尝试添加

$(window).unbind('mousemove')

点击活动中的

答案 2 :(得分:1)

else if(e.type == 'click')
{
    $(window).unbind('mousemove')
}

但实际上你应该为事件命名,这样你才能解除绑定适当的事件监听器。

绑定:$(window).bind('mousemove.dragging', function(){});

解开绑定:$(window).unbind('mousemove.dragging', function(){});