Я сделал небольшое обновление для плагина Александра, чтобы включить поддержку Android. Браузер Android в настоящее время не поддерживает окно. Сенсорный метод определения поддержки касания.
Мне нравится, как сценарий Александра ожидает, чтобы движение не происходило, чтобы предотвратить запуск события, когда пользователь проводит прокруткой по экрану. Однако недостаток этого подхода заключается в том, что он вызывает собственную задержку, ожидая, пока пользователь не уберет палец с экрана перед запуском. Я обновил его плагин, добавив в него «сенсорный» класс, который применяется к элементам, к которым пользователь в данный момент прикасается. Если вы воспользуетесь этим классом, вы сможете немедленно предоставить визуальную обратную связь пользователям, не вызывая фактического события до тех пор, пока проверка движения не будет завершена.
jQuery.event.special.touchclick = {
setup: function (data, namespaces) {
var elem = this, $elem = jQuery(elem);
var ua = navigator.userAgent.toLowerCase();
var isAndroid = ua.indexOf("android") > -1;
if (window.Touch || isAndroid) {
$elem.bind('touchstart', jQuery.event.special.touchclick.onTouchStart);
$elem.bind('touchmove', jQuery.event.special.touchclick.onTouchMove);
$elem.bind('touchend', jQuery.event.special.touchclick.onTouchEnd);
} else {
$elem.bind('click', jQuery.event.special.touchclick.click);
}
},
click: function (event) {
event.type = "touchclick";
jQuery.event.handle.apply(this, arguments);
},
teardown: function (namespaces) {
var elem = this, $elem = jQuery(elem);
if (window.Touch) {
$elem.unbind('touchstart', jQuery.event.special.touchclick.onTouchStart);
$elem.unbind('touchmove', jQuery.event.special.touchclick.onTouchMove);
$elem.unbind('touchend', jQuery.event.special.touchclick.onTouchEnd);
} else {
$elem.unbind('click', jQuery.event.special.touchclick.click);
}
},
onTouchStart: function (e) {
this.moved = false;
$(this).addClass('touchactive');
},
onTouchMove: function (e) {
this.moved = true;
$(this).removeClass('touchactive');
},
onTouchEnd: function (event) {
if (!this.moved) {
event.type = "touchclick";
jQuery.event.handle.apply(this, arguments)
}
$(this).removeClass('touchactive');
}
};
Я также опубликовал это на github на случай, если будут обнаружены другие предупреждения https://github.com/tuxracer/jquery-touchclick