首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angular JS (angular-ui-tree) ng-click冲突与拖动启动事件

Angular JS (angular-ui-tree) ng-click冲突与拖动启动事件
EN

Stack Overflow用户
提问于 2014-11-23 19:52:40
回答 2查看 5.8K关注 0票数 11

我目前正在使用angular-ui-tree库,我正在尝试实现以下行为:

当用户只点击'draggable node‘时,它会触发ng-click函数,如果用户点击并开始拖动,ng-click将被忽略,并开始常规的拖放。

我有以下html结构:

代码语言:javascript
复制
<div ui-tree="rootTree" ng-controller="Controller">
    <div ui-tree-nodes="" ng-model="nodes">
        <div ng-repeat="node in nodes" ui-tree-node="" ng-click="selectNode(node)" >
            <div ui-tree-handle="">
            ...
            </div>
        </div>
    </div>
</div>

当前的行为是,拖放在“mousedown”时立即开始,并且无法区分“click”和尝试开始拖动

下面是触发拖放节点uiTreeNode.js的库代码

代码语言:javascript
复制
var bindDrag = function() {
   element.bind('touchstart mousedown', function (e) {
   if (!scope.$treeScope.multiSelect) {
      dragDelaying = true;
      dragStarted = false;
      dragTimer = $timeout(function() {
         dragStartEvent(e);
         dragDelaying = false;
      },    scope.$treeScope.dragDelay);
   } else {
      toggleSelect(e);
   }
   });
   element.bind('touchend touchcancel mouseup', function() {
      $timeout.cancel(dragTimer);
   });
};
EN

回答 2

Stack Overflow用户

发布于 2014-12-31 00:47:14

我刚刚遇到了同样的问题,我通过将data-drag-delay增加到100来解决它,尝试:

ui-tree="rootTree" ng-controller="Controller" data-drag-delay="100"

票数 10
EN

Stack Overflow用户

发布于 2016-05-30 22:14:10

这是一个很老的问题,但是如果你不想有延迟,你可以注册dropped()回调并在索引没有改变的情况下执行点击操作。例如:

代码语言:javascript
复制
dropped: function(event){
    //if element was not moved, use click event
    if(event.source.index == event.dest.index){
        $scope.someAction();
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27088636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档