2017-08-31 94 views
9

本質孩子可以拖動到父母,但父母不能拖到孩子。JQuery用戶界面可拖動助手不能拖到投擲的孩子

我寫了一個簡單的例子來證明這一點。三個div都可以拖放到另一個上。您可以將藍色拖到父母的綠色或紅色上,並且可以將綠色拖到其父母的紅色上。您不能將紅色拖到子綠色或藍色,也不能將綠色拖到子藍色。

我懷疑這是關係到使用的幫手。如果沒有幫助,元素會被鼠標光標拖動,所以把元素放到子元素上的想法沒有任何意義,但是如果使用幫助器,則可以克隆該對象。

我怎樣才能讓父元素拖到孩子?

HTML:

<div class="first"> 
    <div class="second"> 
    <div class="third"></div> 
    </div> 
</div> 

JS:

$('div').draggable(
{ 
    revert: true, 
    helper: 'clone', 
    appendTo: 'body', 
    refreshPositions: true 
}); 

$('div').droppable(
{ 
    greedy: true, 
    accept: 'div', 
    activeClass: 'active', 
    hoverClass: 'hover', 
    tolerance: 'pointer', 
    drop: function(event, ui) 
    { 
     alert($(this).attr('class')); 
    } 
}); 

CSS:

div 
{ 
    display: inline-block; 
    padding: 40px; 
} 
div.ui-draggable-dragging 
{ 
    outline: 2px solid black; 
} 
div.active 
{ 
    outline: 4px solid #0ff; 
} 
div.hover 
{ 
    background-color: #f0f; 
} 
.first 
{ 
    background-color: red; 
} 
.second 
{ 
    background-color: green; 
} 
.third 
{ 
    background-color: blue; 
    width: 50px; 
    height: 50px; 
} 

https://jsfiddle.net/5dhfmmxf/3/

(也有類似拖着一個幫手的問題在自身上,BU這特別是關於拖到不同的孩子身上。這就是說,我期望有一個解決方案,以允許拖拉助手自己也與孩子一起)。

回答

7

類哈克的方式,但我認爲它的工作。

而不是使用helper: 'clone',我克隆元素自己,用作原始的元素。

有視覺問題,與下降元素如何捕捉,從而快速修復,我說:revertDuration: 0

https://codepen.io/anon/pen/GvbZdy

+0

你應該在你的答案代碼。這也是相當不錯的,但克隆的元素應該放在body標籤中,以避開其他錯誤,比如在父級邊界外移動。 – Sirisian

相關問題