我有一个相当长的 div 列表,我试图将它们用作可放置的 - 但我想隐藏所有不接受当前可拖动元素的可放置。
我在http://jsfiddle.net/N3uh3/上举了一个例子
基本上,如果我拖动“Drag A”元素,它将隐藏所有“Droppable B”元素并允许我拖放到正确的元素上,这很好用。
但是,如果我拖动“拖动 B”元素,它将隐藏所有“可放置 A”元素,但其余放置区域不接受我的可拖动项目。如果我将项目放置在“可放置 B”元素的原始位置,那么它会正确放置(即使元素的位置已经移动)。如果我使用“可见性:隐藏;” 而不是“显示:无”,这也适用于元素不移动。
我希望这是有道理的 - 似乎可放置区域设置为元素的原始位置....有什么办法解决这个问题吗?
.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');
}
});
});
});
提前致谢!