【问题标题】:Ignore parent element using ngDraggable使用 ngDraggable 忽略父元素
【发布时间】:2015-10-05 21:27:43
【问题描述】:

我在一个用户案例中使用 ngDraggable,该用户案例由一个 div 内的一个 div 组成,并且它们都是可拖动的。

我也想重新排序子元素和父元素。

但是,当我尝试移动孩子时,父母也被移动了。

这是一个显示问题的 plunkr:

http://plnkr.co/edit/xhLgXW0hPxLucQiKt6Q1?p=preview

<div ng-drag="true" class="red-box">
     <div ng-drag="true" class="blue-box">
     </div>
</div>

尝试移动蓝色框,红色会一起拖动。

有人知道如何只移动蓝色框吗?

【问题讨论】:

    标签: javascript html angularjs drag-and-drop


    【解决方案1】:

    似乎ng-drag 不是嵌套的。您可以使用 CSS 来获得相同的外观并获得预期的行为。

    我已取消嵌套 div(拖动手柄)并将它们绝对定位(您给出的示例最简单的解决方案)。

    http://plnkr.co/edit/cQ3aUmhvIoK58b88UpRv?p=preview


    不使用OP建议的PR的另一种解决方案是在子元素中添加ng-mousedown="$event.stopPropagation()",即:

    <div ng-drag="true" class="red-box">
     <div ng-drag="true" class="blue-box" ng-mousedown="$event.stopPropagation()"></div>
    </div>
    

    它阻止父元素接收开始拖动的鼠标按下事件。

    http://plnkr.co/edit/onwCzYy4mtI8pz1mSoNV?p=preview

    【讨论】:

    • 感谢您的回答。实际上结果不是我所期望的,因为我希望看到红色框在移动时占据蓝色框。在我的真实情况下,红色框是一个
    • ,我在拖动时带走了孩子
        。我觉得在父母搬家的时候看到孩子留下来,然后孩子出现在目的地的无处可去,这是不好的。
  • 我在 ngDraggable github 上找到了一种解决方法。检查我的答案。再次感谢您。
  • @rcorreia,请看看我的回答中的另一个解决方案。
  • 不错的一个!我分叉了要在凉亭上使用的代码。这种方法比较好。
  • 【解决方案2】:

    分析 ngDraggable github 上的问题,我发现一个 PR 可以骗人:

    https://github.com/fatlinesofcode/ngDraggable/pull/183/files

    if(! _dragEnabled)return 之后添加evt.stopImmediatePropagation() 行,瞧。

    更改后的Plunker

    http://plnkr.co/edit/jbZ7DqzUsfchAG3k0qmY?p=preview

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签