jQueryUIは「スナップされた」要素の内部「状態」を保持しますが、それを取得するには少し作業が必要です。
イベントのイベント ハンドラーを定義する必要がありますstop
(ドラッグ可能なオブジェクトのドラッグが停止したときに呼び出されます)。
と呼ばれる配列snapElements
は、ウィジェット データ内に維持され、次のようになります。
[
{
height: 102,
item: { /* DOM element */ },
left: 10,
snapping: false,
top: 10,
width: 102
}, ...
]
ここで本当に気にかけているのは、item
andsnapping
プロパティです。snapping
アイテムが現在ドラッグ可能なオブジェクトに「スナップ」しているかどうかがわかります。
この配列を念頭に置いて、次のようなコードを記述して、現在「スナップ」しているスナップ可能なターゲットを特定できます。
$(".draggable").draggable({
snap: ".snap",
stop: function(event, ui) {
/* Get the possible snap targets: */
var snapped = $(this).data('draggable').snapElements;
/* Pull out only the snap targets that are "snapping": */
var snappedTo = $.map(snapped, function(element) {
return element.snapping ? element.item : null;
});
/* Process the results in the snappedTo array! */
}
});
最終結果が配列であり、単一の DOM 要素ではない理由は、jQueryUI が実際には十分にスマートで、draggable
2 つの「スナップ可能な」要素をスナップしたことを認識できるからです。
これらすべてが実際に動作していることを示す実際の例を次に示します: http://jsfiddle.net/andrewwhitaker/uYpnW/5/
それが役立つことを願っています。