ドロップ可能なものとして使用しようとしている div のかなり長いリストがありますが、現在のドラッグ可能な要素を受け入れないすべてのドロップ可能なものを非表示にしたいと考えています。
http://jsfiddle.net/N3uh3/に例を掲載しました
基本的に、「Drag A」要素をドラッグすると、すべての「Droppable B」要素が非表示になり、正しい要素にドロップできるようになり、これはうまく機能します。
ただし、「Drag B」要素をドラッグすると、すべての「Droppable A」要素が非表示になりますが、残りのドロップ領域はドラッグ可能なアイテムを受け入れません。「Droppable B」要素の元の場所にアイテムをドロップすると、(要素の位置が移動したとしても) 正しくドロップされます。「visibility: hidden;」を使用すると 「display:none」の代わりに、要素が移動しないため、これも機能します。
これが理にかなっていることを願っています-ドロップ可能な領域が要素の元の位置に設定されているようです....これを回避する方法はありますか?
.lhs { width: 40%; float:left; }
.rhs { width: 40%; float:right; }
.lhs div { margin: 4px; }
.a { background-color: green; }
.b { background-color: red; }
.ui-state-highlight { background-color: yellow; }
.dropZones .ui-droppable { display: none; }
.dropZones .ui-state-highlight { display: block; }
.currentDropZone { display: block; }
<div class="wrapper">
<div class="lhs">
<div class="a">DROP A</div>
<div class="a">DROP A</div>
<div class="a">DROP A</div>
<div class="a">DROP A</div>
<div class="a">DROP A</div>
<div class="a">DROP A</div>
<div class="b">DROP B</div>
<div class="b">DROP B</div>
<div class="b">DROP B</div>
<div class="b">DROP B</div>
<div class="b">DROP B</div>
<div class="b">DROP B</div>
</div>
<div class="rhs">
<div class="a">Drag A</div>
<br />
<div class="b">Drag B</div>
</div>
</div>
$(document).ready(function(){
$('.rhs div').draggable({
helper: function (e,ui) {
// this sets the clone to be a child of the body - fixing overflow:auto problems on divs!
return $(this).clone().appendTo('body').css('zIndex',5).show();
},
revert: 'invalid',
cursor: 'move',
start: function(){
//$('.lhs').addClass('dropZones'); // immediately hides so doesn't get the ui-state-highlight class'
// give a quick period of time then add the class
setTimeout(function() { $('.lhs').addClass('dropZones'); }, 250);
},
stop: function(){
$('.lhs').removeClass('dropZones');
},
});
$('.lhs div').each(function(){
$(this).droppable({
greedy: true,
activeClass: 'ui-state-highlight',
accept: '.' + $(this).attr('class'),
drop: function(event, ui) {
$(this).append($(ui.draggable).clone());
},
activate: function(){
$(this).addClass('currentDropZone');
},
deactivate: function(){
$(this).removeClass('currentDropZone');
}
});
});
});
前もって感謝します!