私は現在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);
});
};