我已經寫我自己的指令,監聽既touchstart
和mousedown
事件(或touchend
/mouseup
等)解決了這個。爲了消除欺騙,我在觸摸事件發生時設置了一個標誌,並且如果設置了該標誌,我將忽略所有的鼠標事件(因爲觸摸事件發生在鼠標事件之前,而不是重複消除會導致移動設備雙重觸發)。
appControllers.controller('AppCtrl', ['$scope',
function($scope) {
$scope._usingTouch = false;
/* app code */
}]).directive('lkClick', [function() {
return function(scope, element, attr) {
var fn = function() {
scope.$apply(function() {
scope.$eval(attr.lkClick);
});
}
element.on('touchstart', function(event) {
scope._usingTouch = true;
lk();
});
element.on('mousedown', function(event) {
if(!scope._usingTouch)
lk();
});
};
}]);
然後,您可以在應用程序的html中添加lk-click="javascript()"
指令。
使用Fastclick更容易,更快速,但是這更具可定製性,不需要您加載Fastclick代碼。
因此,顯然這仍然是一個[問題](https://github.com/angular/angular.js/issues/2548),因爲角度1.2.0尚未解決。幸運的是,您可以插入fastclick.js以獲得更好的效果,然後每次點擊都會觸發很快。您只需將fastclick.js文件添加到您的項目並在任何角度外插入其引導代碼即可。 ** FYI **我編輯了示例中的plunkr以測試一些fastclick方法之間的性能。如果頻繁點擊[test](http://plnkr.co/edit/Av5FRS3oSJe17PyLPwiq?p=preview),似乎ng-click指令會識別最少的點擊次數。 – strangfeld
嘿!..你找到了解決這個問題的方法嗎? – Mackelito
@Mackelito由於ngTouch的限制,它只能刪除ng-click指令的300ms延遲,現在我正在使用fastclick.js。我遇到的問題是我在加載庫之前實例化了Fastclick。因此它不起作用。用angular.run()包裝它解決了我的問題,通過在DOM和Angular準備好時實例化fastlick。 – strangfeld