Angularjs 在ng向左滑动时抑制ng单击操作
单击或向左滑动时,按钮在触摸屏上工作正常:Angularjs 在ng向左滑动时抑制ng单击操作,angularjs,angularjs-ng-touch,Angularjs,Angularjs Ng Touch,单击或向左滑动时,按钮在触摸屏上工作正常: <button ng-click="click(it)" ng-swipe-left="leftSwipe(it)" /> 但是,在桌面上,通过将鼠标单击与左拖动相结合来完成左扫,也会触发单击事件 有什么方法可以抑制这种情况吗?我没有发现任何简单的方法,所以这里有一种解决方法和一种半抑制方法,都依赖于$timeout,但如果您依赖于人机交互,我认为我们可以。 半抑制:我们希望忽略此摘要循环中的单击,并返回到下一个摘要循环中收听事件
<button ng-click="click(it)" ng-swipe-left="leftSwipe(it)" />
但是,在桌面上,通过将鼠标单击与左拖动相结合来完成左扫,也会触发单击事件
有什么方法可以抑制这种情况吗?我没有发现任何简单的方法,所以这里有一种解决方法和一种半抑制方法,都依赖于$timeout,但如果您依赖于人机交互,我认为我们可以。
半抑制:我们希望忽略此摘要循环中的单击,并返回到下一个摘要循环中收听事件
$scope.leftSwipe = function(event){
angular.element(event.target).unbind('click');
$timeout(function(){angular.element(event.target)
.bind('click', function(it) {$scope.click(it);})},0);
};
在这里,我们将事件传递给“左滑动”函数以获取目标元素,如果您不想将事件作为参数传递(取决于您的代码),您可以通过查询($('yourbutonid')
)或不使用(document.querySelector('yourbutonid')
)获取一个元素硬编码id,然后改用它。请注意,在这里重新处理click事件需要再次传递参数(在您的例子中是“it”),这就是为什么它被包装在另一个函数中而不是直接调用的原因。<强>工作区< /强>:我认为这要简单得多,但取决于你和代码。
var hasSwiped = false;
$scope.click = function(event){
if (!hasSwiped){
...
}
};
$scope.leftSwipe = function(event){
hasSwiped = true;
$timeout(function(){ hasSwiped = false; },1000);
};
在这里,我们只需创建一个变量“hasSwiped”,并在滑动时将其设置为true,只有在触发“click”事件后才将其重置为false(这取决于应用程序,但在滑动和单击之间的一秒钟对我来说是合理的)。在click事件中,只要检查此标志是否升起即可。希望这有帮助,
祝你好运 两个很好的方法,虽然不像你说的那么简单。最后,我决定将一刀切的模板拆分为移动版和桌面版;后者不使用ngTouch。