>>No.1補足
質問に「ドラッグ時に呼ばれる」って書いてたね。ごめん。
ただ、重なりのチェックと位置情報は揃ってますから、ある程度理解できたのなら
あとは試行錯誤してもらいたいところですけど。
makeStopCallback, makeStartCallback関数の書き換えと
dragStopFlag, dragCallback関数の追加
makeStopCallback: function(n) {
return function(event, ui) {
var elem = this.parentNode;
if (Obj.overlapJudgment(elem)) {
if (Obj.dragStopFlag === null) return; // 何もしない
var startPosition = Obj.startPositionList[n];
// ui.position.left, topで現在位置を取得できます
// ドラッグ開始位置へ戻す
elem.style.left = startPosition.left + 'px';
elem.style.top = startPosition.top + 'px';
//$(elem).animate({ left: startPosition.left + 'px', top: startPosition.top + 'px' });
}
};
},
makeStartCallback: function(n) {
return function() {
Obj.dragStopFlag = false;
var elem = this.parentNode;
if (Obj.overlapJudgment(elem)) {
Obj.dragStopFlag = null; // ドラッグ開始位置で重なっていればnull代入
}
Obj.startPositionList[n] = { left: elem.offsetLeft, top: elem.offsetTop }; // ドラッグ開始位置オブジェクト保持
};
},
dragStopFlag: false, // ドラッグ中止フラグ
dragCallback: function() {
var elem = this.parentNode;
if (Obj.overlapJudgment(elem)) {
if (Obj.dragStopFlag === false) Obj.dragStopFlag = true; // ドラッグ中止
} else if (Obj.dragStopFlag === null) Obj.dragStopFlag = false; // ドラッグ開始位置で重なっていれば範囲外でfalse代入
}
-----
$( "#dialog0" ).dialog({
dragStart: Obj.makeStartCallback(0),
dragStop: Obj.makeStopCallback(0),
drag: Obj.dragCallback
});
-----
jQuery UI Draggable 1.8.5の書き換え
160行目あたり
//Call plugins and callbacks and use the resulting position if something is returned
// Obj.dragStopFlagを利用した終了処理
var flag = typeof Obj === 'object' ? Obj.dragStopFlag : false;
if (!noPropagation || flag) {
var ui = this._uiHash();
if(this._trigger('drag', event, ui) === false || flag) {
// このブロックに入ればドラッグ終了
this._mouseUp({});
return false;
}
this.position = ui.position;
}
ドラッグを中止させるメソッドへの参照法が分からないのでフラグ使って無理やり終了処理へ入れてます。
不細工だし参考程度に
お礼
使い物になりませんが、ま、いいでしょう