【发布时间】:2011-09-08 07:29:17
【问题描述】:
我已将 jQuery 实时点击事件替换为 jQuery 移动点击事件以提高响应能力。
出于兼容性原因,我觉得这是个坏主意。
是否有必要同时拥有两个事件,有没有办法为同一个函数编写它们?
如('click','tap')
【问题讨论】:
标签: jquery jquery-selectors jquery-mobile
我已将 jQuery 实时点击事件替换为 jQuery 移动点击事件以提高响应能力。
出于兼容性原因,我觉得这是个坏主意。
是否有必要同时拥有两个事件,有没有办法为同一个函数编写它们?
如('click','tap')
【问题讨论】:
标签: jquery jquery-selectors jquery-mobile
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(){ ... })
这在某些浏览器/移动设备中可能没问题,但是,这可能会使事件在触发点击和点击的某些设备上触发两次。
您可以通过执行某种设备/功能检测并仅像这样添加适当的处理程序来解决此问题...
$('selector').bind( myCustomDetectionFunction() ? 'click' : 'tap' ,function(){ ... })
此外,我认为touchstart 和mousedown 是更好的选择。这是因为,在触摸之后,单击事件直到经过延迟才会触发,因为系统允许第二次触摸使其成为双击或成为滑动手势等。 touchstart 事件会立即触发,mousedown 也会立即触发,因此响应速度会更快。
【讨论】:
touchstart 和mousedown。没有必要详细了解它是哪个设备。这可能是确保您获得最快响应跨平台的最简单方法。检测启用触摸的设备就像检查是否定义了Touch 一样简单。所以像这样:(typeof Touch !== "undefined") ? 'touchstart' : 'mousedown'
我们开发了一个小脚本来解决这个问题。只需将它包含在全局级别上,您的点击事件就会立即触发,而延迟事件不会出现任何问题。
【讨论】:
似乎 jQuery mobile 已经有一个事件可以做到这一点:
$(function(){
$('selector').bind('vclick', function(e){
alert('test');
return false;
});
});
【讨论】:
您可以使用 jQuery 中的 vmouse 插件。这将解决点击事件的 300 毫秒延迟(仅限移动设备)以及同时触发点击和触摸事件的情况。
要仅获取 vmouse 插件,请使用 jQuery Mobile Download Builder。将它包含在 jQuery 之后,但在任何依赖此插件的脚本之前。
相关事件为vclick,基本使用如下:
$(".selector").on( "vclick", function( event ) {
// To execute
});
【讨论】: