编辑:新解决方案
我为此找到了一个名为JQuery UI Draggable Collision的插件。使用它,实现您想要的功能变得微不足道。请参阅以下 jsFiddle 示例: http: //jsfiddle.net/q3x8w03y/1/(使用 JQuery UI Draggable Collision 的 1.0.2 版本,以及 JQuery 1.7.2 和 JQueryUI 1.1.18。)
这是代码:
$("#dragMe").draggable({
obstacle: "#butNotHere",
preventCollision: true,
containment: "#moveInHere"
});
</p>
旧解决方案
以下应该工作。不过,它有一个小故障。一旦 div 发生碰撞,您必须“重新抓取”正在拖动的 div,这可能有点烦人。也许其他人会知道如何解决这个问题。你可以在这里看到我的 jsFiddle 示例:http : //jsfiddle.net/MrAdE/8/
var prevOffset, curOffset;
$("#dragMe").draggable({
drag: function(e,ui) {
prevOffset= curOffset;
curOffset= $.extend({},ui.offset);
return true;
}
});
$("#butNotHere").droppable({
greedy: true,
over: function(e,ui) {
ui.helper.offset(curOffset= prevOffset).trigger("mouseup");
},
tolerance: "touch"
});