我正在开发一个必须在各种设备上运行的移动网站。目前最让我头疼的是黑莓手机。
我们需要支持键盘点击和触摸事件。
理想情况下我只使用:
$thing.click(function(){...})
但我们遇到的问题是,其中一些黑莓设备从触摸到触发点击之间存在非常烦人的延迟。
补救措施是改用 touchstart:
$thing.bind('touchstart', function(event){...})
但是我该如何绑定这两个事件,但只触发一个呢?我仍然需要键盘设备的单击事件,但是当然,如果我使用触摸设备,则不希望触发单击事件。
一个额外的问题:有没有办法做到这一点,并另外适应甚至没有 touchstart 事件的浏览器?在研究中发现,BlackBerry OS5 似乎不支持 touchstart,因此还需要依赖该浏览器的单击事件。
附录:
也许更全面的问题是:
使用 jQuery,是否可以/建议使用相同的绑定来处理触摸交互和鼠标交互?
理想情况下,答案是肯定的。如果没有,我还有一些选择:
-
我们使用 WURFL 获取设备信息,以便创建我们自己的设备矩阵。根据设备的不同,我们将使用 touchstart 或 click。
-
通过 JS 检测浏览器中的触摸支持(我需要对此进行更多研究,但这似乎是可行的)。
然而,这仍然留下一个问题:支持两者的设备怎么样。我们支持的一些手机(即诺基亚和黑莓)都有触摸屏and键盘。所以这让我回到了最初的问题……有没有办法以某种方式同时允许两者?
Update:查看 jQuery指针事件 Polyfill https://github.com/jquery/PEP项目允许您绑定到“指针”事件,而不是在鼠标和触摸之间进行选择。
绑定到两者,但创建一个标志,以便该函数仅每 100 毫秒左右触发一次。
var flag = false;
$thing.bind('touchstart click', function(){
if (!flag) {
flag = true;
setTimeout(function(){ flag = false; }, 100);
// do something
}
return false
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)