2015-11-18 70 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属性的元素上的延迟。