次の問題があります。必要に応じて折りたたんだり展開したりできるサブノードを持つ大きなツリーがあります (ノード内のデータは AJAX でフェッチされます)。ただし、jquery.event.drop/drag を使用してドラッグ/ドロップ ターゲットを作成します。
ただし、折りたたんだり展開したりすると、ドロップ ターゲットの位置が変わり、再計算する必要があります。これが私がやりたかった方法です:
function create_drop_targets() {
$('li a')
.bind('dropstart', function(event) {
})
.bind('drop', function(event) {
})
.bind('dropend', function(event) {
});
}
create_drop_targets() は折り畳み/展開時に呼び出されます。
ただし、これは機能しません。jquery.event.drop 内で以下を見つけました。
var drop = $.event.special.drop = {
setup: function(){
drop.$elements = drop.$elements.add( this );
drop.data[ drop.data.length ] = drop.locate( this );
},
locate: function( elem ){ // return { L:left, R:right, T:top, B:bottom, H:height, W:width }
var $el = $(elem), pos = $el.offset(), h = $el.outerHeight(), w = $el.outerWidth();
return { elem: elem, L: pos.left, R: pos.left+w, T: pos.top, B: pos.top+h, W: w, H: h };
}
ここで、setup() メソッドを再度呼び出して、$elements にドロップ可能な新しい位置を再設定する方法を知る必要があります。