11

私は現在angular-ui-treeライブラリを使用しており、次の動作を実現しようとしています:

ユーザーが「ドラッグ可能なノード」をクリックするだけで、ng-click 機能がトリガーされます。ユーザーがクリックしてドラッグを開始すると、ng-click は無視され、通常のドラッグ アンド ドロップが開始されます。

私は次のhtml構造を持っています:

<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>

現在の動作では、ドラッグ アンド ドロップは「マウスダウン」ですぐに開始され、「クリック」とドラッグ開始の試行を区別する方法がありません。

ノードuiTreeNode.jsのドラッグ アンド ドロップをトリガーするライブラリ コードを次に示します 。

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);
   });
};
4

2 に答える 2

10

同じ問題が発生したので、data-drag-delay を 100 に増やして解決しました。

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

于 2014-12-30T16:47:14.220 に答える