Jquery draggables:删除元素会更改其他已删除元素的位置

时间:2012-03-10 01:17:33

标签: jquery position element draggable

放置/放置元素时(通过从一个DIV拖动到另一个DIV)然后删除掉落的DIV中的一个,其中一些正在改变位置。

以下是测试方案:http://jsfiddle.net/TcYHW/8/

主要代码:

<div id="dropwin"></div>
<div id="dragables">
    <div id="d1" class="d"></div>
    <div id="d2" class="d"></div>
    <div id="d3" class="d"></div>
    <div id="d4" class="d"></div>
</div>


$(".d").draggable({
        containment: '#dropwin',
        stack: '#dragables div',
        cursor: 'move',
      });

我该如何避免这种情况?

我发现,元素放置在起始位置的相对位置。即使有些东西被移除,我怎样才能让它们粘在掉落的位置?

我发现了两个近乎相似的问题,但没有一个令人满意的答案:

Remove in Jquery divs with draggables and resizables

jQuery draggable removing without changing position of other elements

2 个答案:

答案 0 :(得分:4)

您需要定位元素absolute。然后删除的框不会影响其他元素的流动。

您可以使用css定位absolute

.d { 
    width: 50px;
    height: 50px;
    margin: 10px;
    display: inline-block;
    position: absolute;
}

但是你必须手动放置每个盒子。诀窍是让他们定位static(或relative .draggable()完成后),然后使用javascript设置他们的位置并将其设置为absolute定位:

$('.d').each(function() {
    var top = $(this).position().top + 'px';
    var left = $(this).position().left + 'px';
    $(this).css({top: top, left: left});
}).css({position: 'absolute'});

演示:http://jsfiddle.net/jtbowden/5S92K/

答案 1 :(得分:0)

我刚刚在你的jsFiddle演示中进行了一些编辑,它似乎正在工作

我的编辑:

<div id="dropwin"></div>
<div id="dragables">
<div class="outer"><div id="d1" class="d"></div></div>
<div class="outer"><div id="d2" class="d"></div></div>
<div class="outer"><div id="d3" class="d"></div></div>
<div class="outer"><div id="d4" class="d"></div></div>
</div>
<button id="b1">Remove d1</button>
<button id="b2">Remove d2</button>
<button id="b3">Remove d3</button>
<button id="b4">Remove d4</button>

在css中:

#dropwin { width: 300px; height: 300px; border: 1px solid #f00;}
#dragables { width: 300px; height: 70px; border: 1px solid #00f; }
.d { width: 50px; height: 50px; margin: 10px; display: inline-block; }
#d1 { background: #f00; position:absolute; }
#d2 { background: #ff0; position:absolute; }
#d3 { background: #f0f; position:absolute; }
#d4 { background: #0ff; position:absolute; }
.outer{ margin:1px 2px 0 0; float:left; width:60px;}