【问题标题】:why are Angular events are being delayed on devices?为什么 Angular 事件在设备上被延迟?
【发布时间】:2015-12-15 04:10:00
【问题描述】:

在我的手机上,当我单击/触摸某个元素时,会在范围内触发某个进程,并且必须对其进行更新,这一切都可以正常工作,但是如果我想立即重复该事件,则无法使用jqLit​​e/jQuery 中的标准.on('click') binder。

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

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();
        });
     }
  };
});

演示:http://jsfiddle.net/HB7LU/21162/

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

但是,在绿色条上,如果您先触摸左侧,然后再触摸右侧,它不会随着您不断触摸而更新。

红条使用 ng-click 指令,绿条使用标准点击活页夹,然后从该范围链向下运行摘要。

Angulars ngTouch 模块是造成这种延迟的原因。我想知道如何使用 ngTouch 覆盖 ngClick 带来的延迟?

【问题讨论】:

  • 在我的电脑上,点击绿色条时我没有看到任何延迟。两者的工作原理完全相同。
  • 请看我的OP,我提到这与设备和角度触摸模块@VVK有关
  • ngTouch 替换了 ngClick 指令,并且 nothing 使用 'click' 事件,这就是延迟存在的原因。

标签: javascript jquery angularjs events jquery-events


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-02
    • 2018-06-24
    • 1970-01-01
    • 2018-06-06
    • 2017-01-15
    • 1970-01-01
    • 2013-03-18
    • 1970-01-01
    相关资源
    最近更新 更多