2012-03-10 120 views
1

當元素被放置/刪除(通過從一個DIV拖動到另一個DIV),然後刪除被刪除的DIV中的元素時,其中一些元素正在改變位置。Jquery draggables:刪除元素會更改其他被刪除元素的位置

這是一個測試場景: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

回答

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/

+0

謝謝你,你的解決方案看起來像我需要什麼,但前提是「dropwin」是(靜態)在左上角。如果你嘗試這個http://jsfiddle.net/BillyG/5S92K/2/,其中DIV居中並水平改變瀏覽器窗口大小,那麼被拖放的拖動不會保持固定,它們會移動。相對於dropwin-box,定位必須是絕對的。一個提示,如何解決這個問題? – 2012-03-10 03:15:13

+0

'#dropwin'和'#dragables'需要有'position:relative'來進行絕對定位才能做正確的事情。 http://jsfiddle.net/5S92K/3/ – 2012-03-10 05:51:38

+0

謝謝,它解決了迄今爲止最好的方法。我更喜歡你的解決方案,因爲它不需要額外的標籤作爲Kaushtuvs的解決方案。 – 2012-03-10 17:50:37

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;} 
+0

謝謝你,我試過你在這裏http://jsfiddle.net/BillyG/TcYHW/9/的解決方案,它看起來不錯,即使「dropwin」居中。我將在我的應用程序中執行此操作,看看它是否可以解決問題。但爲什麼你在這個外部類的頂部和右邊添加了這個邊界? – 2012-03-10 03:20:34

+0

忘記添加位置:絕對上#d1-#d4 http://jsfiddle.net/BillyG/TcYHW/10/ – 2012-03-10 03:29:18

+0

沒有邊距,divs最初會互相摺疊。我的意思是當代碼第一次加載時,四個div將會彼此重疊。現在很高興工作。你能接受答案嗎?)歡呼。 – Kaushtuv 2012-03-10 03:31:35