編輯:新的解決方案
我發現了一個插件這叫做JQuery UI Draggable Collision。使用這個,實現你想要的功能變得微不足道。請參見下面的jsfiddle例如:http://jsfiddle.net/q3x8w03y/1/(這將使用1.0.2版本的JQuery UI可拖動的碰撞,使用jQuery 1.7.2和jQueryUI的1.1.18一起。)
下面是代碼:
$("#dragMe").draggable({
obstacle: "#butNotHere",
preventCollision: true,
containment: "#moveInHere"
});
老辦法
以下應該工作。但它有一個小故障。一旦div碰撞,你必須「regrab」你拖動的div,這可能有點煩人。也許別人會知道如何解決這個問題。你可以看到我的jsfiddle例如here: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"
});
+1巧妙的使用'droppable'的'over'事件觸發'mouseup'。 – 2012-07-12 14:08:42
你知道你的新解決方案是否與JQuery 1.10兼容嗎?我收到錯誤。 – 2013-06-26 16:39:04
這jsfiddle不再工作。答案應該更新版本的細節等 – Kukeltje 2015-12-17 15:40:43