2013-12-21 66 views
23

此Plunkr有2個鏈接。在左邊的一個使用插入角度觸摸模塊的ng-click指令。如在ng-click的角度觸摸模塊描述中所述,ng-click鏈接不應具有300ms的延遲。但是,如果您在移動設備上進行測試,情況依然如此。AngularJS:ngTouch 300ms延遲

因此,PLUNK阻止正確的功能,因爲它在iFrame或類似的東西中執行,或者是否需要將Fastclick.js插入到項目中才能正確工作?我不明白,請幫忙。

實施例:http://plnkr.co/NRRrmMFaIKg2zLu5C1Tg

編輯:在angularjs文檔的example IST也不工作。他們甚至沒有插入角度觸摸模塊。

+0

因此,顯然這仍然是一個[問題](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

+0

嘿!..你找到了解決這個問題的方法嗎? – Mackelito

+2

@Mackelito由於ngTouch的限制,它只能刪除ng-click指令的300ms延遲,現在我正在使用fastclick.js。我遇到的問題是我在加載庫之前實例化了Fastclick。因此它不起作用。用angular.run()包裝它解決了我的問題,通過在DOM和Angular準備好時實例化fastlick。 – strangfeld

回答

56

由於angulars ngTouch模塊只消除ng-click指令的300ms延遲,我現在使用fastclick.js,它與角度完美地協調。

開始時它並不適合我,因爲在DOM準備好之前,我已在其腳本加載之前附加了Fastclick庫。我通過在我的角度應用程序的run block中包裝函數來解決此問題。該功能在DOM準備就緒後執行代碼。

angular.module('myModule', []). 
    run(function() { 
    FastClick.attach(document.body); 
    }); 

這種方式由latest screencast上angularjs YouTube頻道建議。

+0

他提到這個時間戳是什麼時候?我試圖通過視頻快速轉發 – Danger14

+0

@ Danger14 http://youtu.be/xOAG7Ab_Oz0?t=20m48s只是看它約1分鐘,你會看到它;) – strangfeld

+0

無法正確使用角度工具提示 – Pascalius

0

我已經寫我自己的指令,監聽既touchstartmousedown事件(或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代碼。

+2

它應該可以正常工作,但是您必須退出範圍銷燬的事件,否則你會在你的應用程序內存泄漏。只需使用element.off()。 –