2017-08-31 48 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

相关问题