我正在开发一个必须在各种设备上运行的移动网站。目前让我头疼的是黑莓。
我们需要同时支持键盘点击和触摸事件。
理想情况下,我会使用:
$thing.click(function(){...})
但我们遇到的问题是,其中一些黑莓设备从触摸到触发点击之间存在非常烦人的延迟。
补救措施是改用 touchstart:
$thing.bind('touchstart', function(event){...})
但是我如何去绑定两个事件,但只触发一个?我仍然需要键盘设备的点击事件,但当然,如果我使用的是触摸设备,我不希望触发点击事件。
一个额外的问题:有没有办法做到这一点,并额外适应甚至没有触摸启动事件的浏览器?在对此进行研究时,看起来 BlackBerry OS5 不支持 touchstart,因此还需要依赖该浏览器的点击事件。
附录:
也许更全面的问题是:
使用 jQuery,是否可以/推荐使用相同的绑定处理触摸交互和鼠标交互?
理想情况下,答案是肯定的。如果没有,我确实有一些选择:
我们使用 WURFL 来获取设备信息,因此可以创建我们自己的设备矩阵。根据设备,我们将使用 touchstart 或 click。
通过 JS 检测浏览器中的触摸支持(我需要对此进行更多研究,但似乎这是可行的)。
但是,这仍然存在一个问题:支持 BOTH 的设备怎么样。我们支持的一些手机(即诺基亚和黑莓)既有触摸屏 又有 键盘。所以那种让我回到原来的问题……有没有办法以某种方式同时允许两者?
更新 :查看 jQuery Pointer Events Polyfill项目,它允许您绑定到“指针”事件,而不是在鼠标和触摸之间进行选择。
绑定到两者,但制作一个标志,以便该函数仅每 100 毫秒左右触发一次。
var flag = false; $thing.bind('touchstart click', function(){ if (!flag) { flag = true; setTimeout(function(){ flag = false; }, 100); // do something } return false });