2015-11-18 98 views
0

我一直在使用webkit和AngularJs在iOS上編寫應用程序,因爲我正在做這件事我在頁面上選擇按鈕時遇到了延遲。因此,我寫了一個指令在touchstart上實現按鈕選擇,但我仍然在選擇延遲。使用webkit運行iOS應用程序時的選擇延遲

我寫的指令下面給出:

angular.module('test').directive('fastClick',function(){ 

    // Runs during compile 
    return {  
     restrict: 'A', // E = Element, A = Attribute, C = Class, M = Comment 
     link: function($scope, iElm, iAttrs, controller) { 

      iElm.bind('touchstart',function(){ 
       var event = document.createEvent('Event'); 
       event.initEvent('select', true, true); 
       iElm[0].addEventListener('select',true, false); 
       iElm[0].dispatchEvent(event); 
      }); 
     } 
    }; 
}); 

而且我有殘疾縮放網頁上。

+0

你的意思是選擇點擊事件嗎? – LordTribual

+0

點擊延遲發生的任何按鈕 –

+0

請參閱下面的答案。 – LordTribual

回答

0

正如你在評論中提到的那樣,每當你點擊一個按鈕時你都會遇到延遲。延遲的主要原因是移動瀏覽器實施了300毫秒的延遲,以決定用戶是否想要雙擊以放大頁面。我強烈建議this article,這更詳細地解釋了這個問題。基本上,它的下面:

在觸摸設備如手機或平板電腦,瀏覽器實現用戶停止觸摸顯示屏和 時刻瀏覽器中執行的點擊時間之間的300ms的延遲 。它最初被引入,因此瀏覽器可以告知用戶是否想要雙擊以放大網頁 。瀏覽器基本上等待大約300毫秒,以查看用戶 是雙擊還是僅點擊顯示一次。雖然300毫秒 看起來很短,但當您移除延遲時,它的顯着程度令人驚訝。

如果您未使用混合移動應用程序框架(如Ionic),則可能使用FastClick一種可能的解決方案。

FastClick是一個簡單,易於使用的圖書館,對於消除身體水龍頭和點擊事件對移動瀏覽器 射擊之間的300ms的延遲 。

另外,如果你決定使用FastClick我建議將其初始化一個run塊,像這樣:

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

FastCklick的嚴格測試,應用廣泛,在許多設備上的偉大工程。

另一種選擇是使用ngTouch。但是,ngTouch會覆蓋ngClick,因此僅刪除具有ng-click屬性的元素上的延遲。