ngDraggable 在拖动结束后避免 ng-click

Posted

技术标签:

【中文标题】ngDraggable 在拖动结束后避免 ng-click【英文标题】:ngDraggable avoid ng-click after drag end 【发布时间】:2015-12-15 23:41:15 【问题描述】:

我对 ng-drag 元素进行了 ng-click,当我开始移动元素时一切正常,但是当我停止它时,该元素激活了我的 ng-click,我怎样才能避免 ng-click?

<div ng-click="unselectImage(image);" ng-drag="true" ng-drag-data="'multipleItems'" ng-center-anchor="true" data-allow-transform="false" ng-drag-success="selectImage(image);"></div>

我正在使用ngDraggable。我尝试使用ng-drag-success,但没有成功。

【问题讨论】:

试试ng-drop-success? ng-drag-success 完成了这项工作,但它在大多数情况下都不起作用。一般来说,我相信有办法告诉我们在拖动时不要使用 ng-click。 您可能需要等待here 的答案,或者您可以尝试实现与here 中提到的类似的东西? 【参考方案1】:

我做了一个指令 (alClick),它只是 ng-click,但如果默认情况下按下持续时间长于 750 毫秒,则会取消任何点击。因此,拖动或滑动时不会触发 click 或 tap 事件。

<div al-click="unselectImage(image);" ng-drag="true" ng-drag-data="'multipleItems'" ng-center-anchor="true" data-allow-transform="false" ng-drag-success="selectImage(image);"></div>

【讨论】:

就是这样 - 答案是完整的并针对问题进行了定制。 很好的指令!对于桌面设置,我想知道是否不仅考虑是否应该基于时间点击,还可以考虑基于移动的像素?我可以做一个仍然触发点击的“快速拖动”。好像还不支持,不过我没看过代码库。【参考方案2】:

在 David Zemens 的帮助下,我做了什么。我发现我可以使用

$rootScope.$on('draggable:start', function (data) 
    isDragging=true;
);

在我的 ng-click 函数中,我添加了如下内容:

$scope.unselectImage = function (image) 
    if(isDragging) isDragging=false;
    else
        // do the magic
    

通常它可以解决问题。当拖动开始时,它广播它正在开始,当它结束时,ng-click 起作用,在我们的例子中,它只是说拖动结束。

【讨论】:

其实我是这样做的,而且效果很好,忘记回答这个问题了。谢谢。

以上是关于ngDraggable 在拖动结束后避免 ng-click的主要内容,如果未能解决你的问题,请参考以下文章

NgDraggable : 拖入嵌套放置

如何拖动Angular动态创建的模态

可拖动的 ngx-bootstrap 模态只有身体移动和背景固定

在 UIScrollView 中模拟拖动结束

UIPanGestureRecognizer 状态结束后动画中的小问题

ngDraggable简单使用及实现拖拽排序