我正在一个必须在各种设备上工作的移动网站上。目前让我头疼的是黑莓。
我们需要同时支持键盘单击和触摸事件。
理想情况下,我只会使用:
$thing.click(function(){...})
但我们遇到的问题是,这些黑莓设备中的某些设备从触摸到触发点击之间都存在非常令人讨厌的延迟。
补救措施是改为使用touchstart:
$thing.bind('touchstart', function(event){...})
但是我该如何绑定两个事件,而只触发一个?我仍然需要键盘设备的click事件,但是,当然,如果我使用的是触摸设备,则不要触发click事件。
一个额外的问题:是否仍然可以这样做,并且还可以容纳甚至没有touchstart事件的浏览器?在进行研究时,BlackBerry OS5似乎不支持touchstart,因此还需要依赖于该浏览器的单击事件。
附录:
也许更全面的问题是:
使用jQuery,是否可以/建议使用相同的绑定来处理触摸交互和鼠标交互?
理想情况下,答案是肯定的。如果没有,我确实有一些选择:
1)我们使用WURFL获取设备信息,因此可以创建我们自己的设备矩阵。根据设备,我们将使用touchstart或click。
2)通过JS检测浏览器中的触摸支持(我需要对此进行更多研究,但这似乎是可行的)。
但是,这仍然存在一个问题:同时支持两者的设备又如何呢?我们支持的某些手机(即诺基亚和BlackBerries)同时具有触摸屏和键盘。因此,这使我全神贯注于最初的问题...是否有办法以某种方式同时允许这两者?
.bind('touchstart mouseup')
将解决该问题(基于以下评论之一)