我目前正在使用angular-ui-tree库,我正在尝试实现以下行为:
当用户只点击'draggable node‘时,它会触发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>当前的行为是,拖放在“mousedown”时立即开始,并且无法区分“click”和尝试开始拖动
下面是触发拖放节点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);
});
};发布于 2014-12-31 00:47:14
我刚刚遇到了同样的问题,我通过将data-drag-delay增加到100来解决它,尝试:
ui-tree="rootTree" ng-controller="Controller" data-drag-delay="100"
发布于 2016-05-30 22:14:10
这是一个很老的问题,但是如果你不想有延迟,你可以注册dropped()回调并在索引没有改变的情况下执行点击操作。例如:
dropped: function(event){
//if element was not moved, use click event
if(event.source.index == event.dest.index){
$scope.someAction();
}
}https://stackoverflow.com/questions/27088636
复制相似问题