ESD*_*tor 3 jquery drag-and-drop jquery-ui jquery-ui-draggable jquery-ui-droppable
我知道标题令人困惑,但问题很容易复制.
我的页面上有一些可以放置的元素(jQueryUI),hoverClass显示它们被拖动的时间.但是,我有一些隐藏的元素,有时在拖动过程中显示,然后不应该像他们应该的那样响应他们的hoverClass.
我在这里有一个显示这种情况的jsFiddle ,但是,如果你继续拖动div最终listItems开始显示他们的hoverClass.但是,在我的网站上这永远不会发生...... hoverClass永远不会出现在新显示的项目上.
HTML
<ul>
<li>Row1</li>
<li>Row2</li>
<li>Row3<span id="More">MORE...</span></li>
<li style="display: none;">Row4</li>
<li style="display: none;">Row5</li>
</ul>
<div id="DragMe">DragMe!</div>
Run Code Online (Sandbox Code Playgroud)
CSS
#DragMe {
position: absolute;
height: 100px;
width: 100px;
border: 1px solid black;
background-color: RGBA(255,255,255,0.5);
}
.DragOver {
background-color: #000000;
color: #FFFFFF;
}
#More {
margin-left: 10px;
}
Run Code Online (Sandbox Code Playgroud)
JavaScript的
$('#DragMe').draggable({
cursorAt: {top: 50, left: 50}
});
$('li').droppable({
hoverClass: 'DragOver'
});
$('#More').droppable({
over: function() {
$('li').show();
}
});
Run Code Online (Sandbox Code Playgroud)
有什么我可以改变,以使这工作正常吗?
iap*_*dev 14
我猜jQuery UI有一个错误,使用隐藏的元素是droppables.解决方法可能是使用不透明度:
HTML
...
<li class="hidden">Row4</li>
<li class="hidden">Row5</li>
...
Run Code Online (Sandbox Code Playgroud)
CSS
.hidden{
opacity: 0;
}
Run Code Online (Sandbox Code Playgroud)
JS
$('#More').droppable({
over: function() {
$('li.hidden').removeClass('hidden');
}
});
Run Code Online (Sandbox Code Playgroud)
演示:http://jsfiddle.net/CsXpL/2/
编辑
你欠我冰镇啤酒!Draggable有以下选项:refreshPositionsType说:
If set to true, all droppable positions are calculated on every mousemove. Caution: This solves issues on highly dynamic pages, but dramatically decreases performance..
链接:http://api.jqueryui.com/draggable/#option-refreshPositions
所以解决方案是:
$('#DragMe').draggable({
cursorAt: {top: 50, left: 50},
refreshPositions: true
});
Run Code Online (Sandbox Code Playgroud)
演示:http://jsfiddle.net/CsXpL/9/