Cordova 从phonegap应用程序中删除300毫秒延迟

Cordova 从phonegap应用程序中删除300毫秒延迟,cordova,webkit,Cordova,Webkit,我一直在努力使我的应用程序更具响应性,但不幸的是,似乎没有任何帮助。 我正在使用PhoneGap,因此我体验了著名的触摸事件300毫秒延迟 这让应用程序感觉非常迟钝和缓慢,这是不可能的 我看到一些库,比如Fastclick.js,为jQuery移动用户解决了这个问题,但我没有使用jQuery移动。我正在使用HTML、CSS、JavaScript和jQuery制作我的应用程序 我真的需要找到一种方法来摆脱300毫秒的点击延迟。 期待我能得到任何帮助 谢谢。克里斯托夫·科恩雷茨在他的报告中谈到了这个

我一直在努力使我的应用程序更具响应性,但不幸的是,似乎没有任何帮助。 我正在使用PhoneGap,因此我体验了著名的触摸事件300毫秒延迟

这让应用程序感觉非常迟钝和缓慢,这是不可能的

我看到一些库,比如Fastclick.js,为jQuery移动用户解决了这个问题,但我没有使用jQuery移动。我正在使用HTML、CSS、JavaScript和jQuery制作我的应用程序

我真的需要找到一种方法来摆脱300毫秒的点击延迟。 期待我能得到任何帮助


谢谢。

克里斯托夫·科恩雷茨在他的报告中谈到了这个问题。这是第6集,视频将在(第31分钟)播放

基本上,300ms延迟不是一个bug或性能问题,它是检测可能的双击所必需的功能

消除该延迟的解决方案是使用的组合,而不是带有如下内容的
click
事件:

var trackingClick=false;
var targetElement=null;
var touchStartX=0;
var touchStartY=0;
var-touchBoundary=10;
target.addEventListener('touchstart',函数(事件){
trackingClick=true;
targetElement=event.target;
touchStartX=event.targetTouches[0].pageX;
touchStartY=event.targetTouches[0].pageY;
返回true;
});
target.addEventListener('touchend',函数(事件){
trackingClick=false;
//处理单击事件
...
返回false;
});
target.addEventListener('touchmove',函数(事件){
如果(!trackingClick){
返回true;
}
//如果触摸已移动,请取消单击跟踪
if(targetElement!==event.target
||(Math.abs(event.changedTouches[0].pageX-touchStartX)>touchBoundary
||(Math.abs(event.changedTouches[0].pageY-touchStartY)>touchBoundary)){
trackingClick=false;
targetElement=null;
}
返回true;
});
target.addEventListener('touchcancel',function(){
trackingClick=false;
targetElement=null;
});
但基本上就是这么做的(事实上,上面的代码片段只是一个非常基本的例子)。还有很多其他情况需要处理,因此如果您不想实现自己的库,您应该仔细看看FastClick。它不仅适用于jQuery移动用户,事实上,它甚至不需要jQuery,它只是一个独立的小容量库

jQuery移动用户注意:您可以使用FastClick,但应注意内置的类似功能:


tl;dr:如果没有jQuery Mobile,请使用

Fastclick对我不起作用。 也许它不支持Phonegap或它正在使用的webview

修复Phonegap/cordova中300毫秒延迟的唯一方法是:

$('yourElement').on( 'touchstart', function ( startEvent ) {});

而不是onclick。任何其他解决方案,包括fastclick,在Phonegap中都不起作用。

在触发click事件时fastclick出现一些问题后,我用一个超最小的解决方案解决了它。此示例使用jQuery

$(document).on('touchstart', '.clickable', function(e){
    // This prevents the click to be completed
    // so will prevent the annoying flickering effect
    e.preventDefault();
});
您必须将.clickable类添加到任何要消除300米延迟的元素中

然后,更改touchstart事件的所有单击事件,以便

$('#elementid').click(function(e){
   console.log('ex event'); 
}
现在一定是这样

$(document).on('touchstart', '#elementid', function(e){
   console.log('new event'); 
}

感谢您提供这些信息。我将fastclick.js添加到我的项目中,并添加了window.addEventListener('load',function(){fastclick.attach(document.body);},false);到DeviceRady函数,但仍然没有。没有改进。:/知道为什么会发生这种情况吗?@alwaysStuck在看不到整个代码的情况下很难判断出问题所在。你应该发布一些代码(最好是a),可能是在一个新问题中。我认为您的答案对于我的初始问题是正确的。唯一的问题可能是我的代码在某个地方崩溃了,但由于这不是初始问题的一部分,我将您的答案标记为已接受。再次感谢!可能有人可以破解UIWebView-是的,完全相同的问题,它会使您完全失败nse…解决方案,使用快速点击:p非常感谢这个问题!!!!你的解决方案很有用。很好的解释!