2014-02-11 63 views
4

我正在構建一個包含Angular的移動Web應用程序,並且我正在嘗試加入ngTouch(角度觸摸)模塊以加速移動設備上的點擊事件。爲什麼在使用ngTouch時觸發多個點擊事件?

這裏是應用 ngTouch:http://lukasolson.github.io/n-spade-cards/ng-click/

這裏是應用 ngTouch:http://lukasolson.github.io/n-spade-cards/ng-touch/

我在iPhone 5的Safari測試。

沒有ngTouch模塊,一切工作正常,但有一個令人討厭的300毫秒點擊延遲。

但是,使用ngTouch模塊時,每當我點擊屏幕時,Web應用程序都認爲我點擊了兩次,破壞了我的應用程序的功能。

我是否錯誤地包含了ngTouch模塊?爲什麼多個點擊事件觸發?

+0

難道是觸發'click'事件和'touch'事件? –

+0

也許...但是爲什麼?據我所知,我正確使用它。 – Lukas

+0

你最近是否在檢查https://github.com/angular/angular.js/issues/6251? – coma

回答

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」 的點擊次數將阻止點擊發生,只有觸發器會發射。

只是測試它,讓我知道它是否有用。

順便說一句,如果你不關心變焦則可以避免延遲:

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

我用添加此爲「應用程序」。

UPDATE

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

+0

嗯...我真的看了一下fastclick,但我真的很想知道這是否是Angular的錯誤,或者我做錯了什麼。你的答案提供了另一種選擇,但並沒有告訴我我做錯了什麼。 – Lukas

+0

讓我改變名稱以避免與https://github.com/ftlabs/fastclick混淆。是的,我認爲這是一個錯誤,這就是爲什麼我打開它的票據https://github.com/angular/angular.js/issues/6251 – coma

+0

@coma:當我使用這個技術時,點擊事件就會死掉。可能是什麼問題? –

相關問題