Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 在ng向左滑动时抑制ng单击操作_Angularjs_Angularjs Ng Touch - Fatal编程技术网

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。