禁用鼠标点击时的移动

5

我正在进行一项拖放实验,这是我的代码:

$('.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 });
    }
});

在鼠标按下时,它应该通过移动鼠标来启动拖动效果,之后如果我想将方框停靠/放置在我想要的位置,我点击它应该停止移动,但如果我再次点击它,它不会停止移动 - 只会继续跟随我的鼠标。如何停止拖动?

3个回答

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')


没有您,我们什么也做不了。谢谢。 - MacMac

3
在你的点击事件中尝试添加 $(window).unbind('mousemove')

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

但实际上,您应该对事件进行命名,这样您只需解除绑定适当的事件侦听器即可。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接