我已经将jQuery的live点击事件替换为jQuery移动触摸事件以增加响应速度。
我有一种感觉,出于兼容性的原因,这可能是一个坏主意。
是否有必要同时拥有这两个事件,并且是否有任何方法将它们都写在同一个函数中?
例如:('click','tap')
我已经将jQuery的live点击事件替换为jQuery移动触摸事件以增加响应速度。
我有一种感觉,出于兼容性的原因,这可能是一个坏主意。
是否有必要同时拥有这两个事件,并且是否有任何方法将它们都写在同一个函数中?
例如:('click','tap')
Billy提供的答案非常完整,在我使用了几次后实际上效果很好。此外,你可能还想看一下JQuery Mobile中的vmouse插件,它是对鼠标事件的抽象尝试:
// This plugin is an experiment for abstracting away the touch and mouse
// events so that developers don't have to worry about which method of input
// the device their document is loaded on supports.
-- https://github.com/jquery/jquery-mobile/blob/master/js/vmouse.js
我一直在自己的项目中使用它,现在看来响应还不错。使用时,可以像这样:
$('selector').bind('vclick', function () { ...
或者
$('selector').bind('vmousedown', function () { ...
你可以像这样一次绑定多个事件:
$('selector').bind('click tap',function(){ ... })
在某些浏览器/移动设备上可能还好,但是在某些同时触发tap和click事件的设备上可能会导致事件被触发两次。
您可以通过进行某种设备/功能检测并仅添加适当的处理程序来解决此问题,例如...
$('selector').bind( myCustomDetectionFunction() ? 'click' : 'tap' ,function(){ ... })
此外,我认为touchstart
和mousedown
事件更好选择。这是因为在触摸后,点击事件要经过一段时间的延迟才会触发,因为系统允许第二个触摸使其成为双击或滑动手势等等。而touchstart
事件会立即触发,mousedown
事件也是如此,因此响应速度应该更快。
touchstart
和 mousedown
事件。不必详细了解是哪种设备。这可能是确保跨平台获得最快响应的最简单方法。检测设备是否支持触摸只需检查 Touch
是否已定义即可。因此可以这样写:(typeof Touch !== "undefined") ? 'touchstart' : 'mousedown'
- Billy Moon看起来jQuery mobile已经有一个事件可以做到这一点:
$(function(){
$('selector').bind('vclick', function(e){
alert('test');
return false;
});
});
$(".selector").on( "vclick", function( event ) {
// To execute
});