我已經對亞歷山大的插件做了一個小更新,包括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