Ответ 1
Christophe Coenraets рассмотрел этот вопрос в своей 10 лучших технических приемов для приложений PhoneGap. Это №6, а видео доступно на Adobe TV (на 31-й минуте).
В принципе, задержка в 300 мс не является ошибкой или проблемой производительности, это функция, необходимая для обнаружения возможного двойного нажатия.
Решение, чтобы избавиться от этой задержки, заключается в использовании комбинации 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: используйте FastClick, если у вас нет jQuery Mobile