2012-03-10 16 views
1

要素が配置/ドロップされると(ドロップされた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', 
     }); 

私はこの問題を回避するにはどうすればよいですか?

要素が開始位置の相対位置に配置されていることがわかりました。たとえ一部が削除されても、落とした位置にそれらを貼り付けることができますか?

は、私は2つの近くに同様の質問を見つけましたが、満足のいく答えなし:

Remove in Jquery divs with draggables and resizables

jQuery draggable removing without changing position of other elements

答えて

4

あなたはあなたの要素がabsoluteを配置する必要があります。削除されたボックスは他の要素のフローに影響を与えません。

あなたは彼らにabsoluteを配置するためにCSSを使用することができます。

.d { 
    width: 50px; 
    height: 50px; 
    margin: 10px; 
    display: inline-block; 
    position: 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が中央に置かれ、ブラウザのウィンドウサイズを水平に変更すると、ドロップされたdraggablesは固定されず、移動します。測位はdropwin-boxに対して絶対的でなければなりません。ヒント、これを解決する方法は? –

+0

'#dropwin'と'#dragables'には正しいことをする絶対的な位置付けのために 'position:relative'が必要です。 http://jsfiddle.net/5S92K/3/ –

+0

ありがとうございます、それはこれまでのところ最良の方法を解決します。私はKaushtuvsのソリューションがそうしているようにdraggablesの周りに余分なタグを必要としないので、あなたのソリューションを好む。 –

0

私はちょうど作られたいくつかの編集のトリックは、彼らがstatic.draggable()後またはrelativeが行われます)位置のままにして、その位置を設定するためにJavaScriptを使用してabsolute位置にそれらを設定することです

<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> 
:とあなたのjsFiddleのデモでは

私の編集の作業をしているように見えました

と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"が中心になっても、それは良いようです。私は私のアプリケーションでこれを実装し、問題が解決するかどうかを確認します。しかし、なぜあなたは外側のクラスの右と右にこのマージンを追加しましたか? –

+0

ポジションを追加するのを忘れました:#d1-#d4 http://jsfiddle.net/BillyG/TcYHW/10/ –

+0

マージンがなければ、divは最初に互いに崩壊します。私が意味することは、コードが最初にロードされるときに4つのdivが互いに重なることです。今はうれしいです。あなたは答えを受け入れることができますか:)歓声。 – Kaushtuv

関連する問題