Christophe Coenraetsはこの問題を彼のTop 10 Performance Techniques for PhoneGap Applicationsで解決しました。それは#6で、ビデオはAdobe TV(31分目)にあります。
基本的に、300msの遅延はバグでもパフォーマンス上の問題でもなく、ダブルタップを検出するために必要な機能です。
その遅れを取り除くための解決策ではなく、このようなものでclick
イベントのtouch
eventsの組み合わせを使用することです:
var trackingClick = false;
var targetElement = null;
var touchStartX = 0;
var touchStartY = 0;
var touchBoundary = 10;
target.addEventListener('touchstart', function(event) {
trackingClick = true;
targetElement = event.target;
touchStartX = event.targetTouches[0].pageX;
touchStartY = event.targetTouches[0].pageY;
return true;
});
target.addEventListener('touchend', function(event) {
trackingClick = false;
//handle click event
...
return false;
});
target.addEventListener('touchmove', function(event) {
if (!trackingClick) {
return true;
}
// If the touch has moved, cancel the click tracking
if (targetElement !== event.target
|| (Math.abs(event.changedTouches[0].pageX - touchStartX) > touchBoundary
|| (Math.abs(event.changedTouches[0].pageY - touchStartY) > touchBoundary)) {
trackingClick = false;
targetElement = null;
}
return true;
});
target.addEventListener('touchcancel', function() {
trackingClick = false;
targetElement = null;
});
しかし、それはFastClickが、実際には(上記のスニペットをやっていることは基本的ですfastclick source codeから切り取られた非常に基本的な例です)。他にも多くのケースがありますので、独自のライブラリを実装する気がない場合は、FastClickを詳しく見てください。実際にはjQueryは必要ありませんが、それは単なる内蔵フットプリントライブラリです。 jQueryのモバイルユーザのための
注:あなたはFastClickを使用することができますが、組み込みの類似した特徴を認識しておく必要がありますvclick
TL; DR:あなたが持っていない場合はFastClickを使用jQueryのモバイル
おかげで多くのことをしなければなら!!!! – jegadeesh