使用ngTouch时为什么会触发多次点击事件?

时间:2014-02-11 17:24:42

标签: javascript angularjs mobile-safari angularjs-ng-touch

我正在使用Angular构建移动网络应用,我正在尝试合并ngTouch(角度触摸)模块,以加快移动设备上的点击事件。

以下是没有 ngTouch的应用http://lukasolson.github.io/n-spade-cards/ng-click/

以下是带有 ngTouch的应用http://lukasolson.github.io/n-spade-cards/ng-touch/

我正在使用Safari测试iPhone 5。

没有ngTouch模块,一切正常,但有300毫秒的恼人点击延迟。

但是,使用ngTouch模块,每次点击屏幕时,网络应用程序都认为我正在点击两次,破坏了我的应用程序的功能。

我是否错误地包括ngTouch模块?为什么要点击多个点击事件?

1 个答案:

答案 0 :(得分:12)

来源:http://jsfiddle.net/coma/2hWWa/
在iPhone上测试:http://jsfiddle.net/coma/2hWWa/embedded/result/

angular.module('app').directive('myclick', function() {

    return function(scope, element, attrs) {

        element.bind('touchstart click', function(event) {

            event.preventDefault();
            event.stopPropagation();

            scope.$apply(attrs['myclick']);
        });
    };
});

现在你可以:

<a myclick="aFunction()">click it!</a>

它不会“复制”点击次数,因为“stopPropagation”会阻止点击发生,只会触发touchstart。

测试一下,让我知道它是否有用。

顺便说一句,如果您不关心缩放,那么您可以通过以下方式避免延迟:

http://updates.html5rocks.com/2013/12/300ms-tap-delay-gone-away

我用它来为“apps”添加它。

<强>更新

https://github.com/angular/angular.js/issues/6251