編集:新しいソリューション
JQuery UIDraggableCollisionと呼ばれるこのプラグインを見つけました。これを使用すると、必要な機能を実装するのは簡単になります。次のjsFiddleの例を参照してください。http://jsfiddle.net/q3x8w03y/1/ (これは、バージョン1.0.2のJQuery UI Draggable Collisionと、JQuery1.7.2およびJQueryUI1.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"
});