Christophe Coenraets は、彼のTop 10 Performance Techniques for PhoneGap Applicationsでこの問題に取り組んでいます。それは#6で、ビデオはAdobe TVで利用できます(31分)。
基本的に、300ms の遅延はバグやパフォーマンスの問題ではなく、ダブルタップの可能性を検出するために必要な機能です。
その遅延を取り除く解決策は、イベントの代わりに次のようなイベントの組み合わせを使用するtouch
ことですclick
:
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 のソース コードから切り取った非常に基本的な例にすぎません)。他にも処理すべきケースがたくさんあるので、独自のライブラリを実装したくない場合は、FastClick を詳しく調べてください。これはjQuery モバイルユーザーだけでなく、実際には jQuery を必要とせず、自己完結型の小さなフットプリント ライブラリです。
jQueryモバイルユーザーへの注意:FastClickを使用できますが、組み込みの同様の機能に注意する必要があります:vclick
tl;dr : jQuery Mobile がない場合はFastClickを使用してください