为什么Angular事件在设备上被延迟?

时间:2015-12-15 04:10:00

标签: javascript jquery angularjs events javascript-events

在我的手机上,当我点击/触摸某个元素时,会激活该范围内的某个进程,并且必须更新它才能正常工作,但是如果我想立即重复该事件,则不会使用jqLit​​e / jQuery中的标准.on('click')活页夹。

当你触摸容器时,两者之间会有一定的延迟。

var myApp = angular.module('myApp', ['ngTouch']);

myApp.controller('myCtrl', function MyCtrl($scope) {
    $scope.name = 'Superhero';
    $scope.counter = 0;
    $scope.fire = function() {
        $scope.counter++;
    }; 
});


myApp.directive('directiveA', function() {
    return {
      restrict: 'A',
      link : function(scope, element) {
        scope.counterB = 0;
        $(element).on('click', function() {
            scope.counterB++;
            scope.$digest();
        });
     }
  };
});

DEMO:http://jsfiddle.net/HB7LU/21162/

在演示中,如果您触摸红色条的一侧然后触摸另一侧,无论您触摸它多快,它都会更新。

然而,在绿色栏上,如果您触摸左侧,然后触摸右侧,则在您继续触摸时不会更新。

红色栏正在使用ng-click指令,绿色栏正在点击活页夹上使用标准,然后从该范围链中运行摘要。

Angulars ngTouch模块导致此延迟。我想知道如何通过使用ngTouch来覆盖ngClick引起的延迟?

1 个答案:

答案 0 :(得分:1)

如果查看ng-click的文档,可以看到点按/释放和触发点击事件之间有300毫秒的延迟,但ng-click事件不使用默认点击触发处理程序,因此没有延迟,但是当您使用手动click事件绑定时,延迟即将出现。

  

更强大的替代默认ngClick设计   用于触摸屏设备。大多数移动浏览器等待大约300毫秒   在发送点击事件之前点击并释放之后。这个版本   立即处理它们,然后阻止以下单击事件   来自传播。