我正在尝试拖放'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上,它应该通过移动鼠标来启动拖动效果,之后如果我想停靠/放下我想要它的盒子,我点击它应该禁用移动但是如果我点击它,它不会停止移动 - 只是继续跟随我的鼠标。你怎么能停止拖动?
答案 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(){});