我已经对亚历山大的插件做了一个小更新,包括Android支持。 Android的浏览器目前不支持window.Touch触摸支持检测方法。
我喜欢Alexandre的脚本如何等待以确保移动不会发生,以防止在用户滑动滚动屏幕时触发事件。然而,这种方法的一个垮台就是,它在等待用户在触发之前将他们的手指从屏幕上抬起而导致其自身的延迟。我已经更新了他的插件,以包含一个适用于用户正在触摸的项目的“趣味”类。如果您利用该课程,则可以在移动检查完成之后立即向用户提供视觉反馈,而不会导致实际事件触发。
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
实际上进一步告诫,有干的活(“touchstart”,...)之间的差异;并做绑定('touchstart',...); ? – Avisra 2011-05-19 19:13:35
是的:http://stackoverflow.com/questions/2690370/live-vs-bind – 2011-05-19 19:29:58