小编典典

如何绑定“touchstart”和“click”事件但不响应两者?

all

我正在开发一个必须在各种设备上运行的移动网站。目前让我头疼的是黑莓。

我们需要同时支持键盘点击和触摸事件。

理想情况下,我会使用:

$thing.click(function(){...})

但我们遇到的问题是,其中一些黑莓设备从触摸到触发点击之间存在非常烦人的延迟。

补救措施是改用 touchstart:

$thing.bind('touchstart', function(event){...})

但是我如何去绑定两个事件,但只触发一个?我仍然需要键盘设备的点击事件,但当然,如果我使用的是触摸设备,我不希望触发点击事件。

一个额外的问题:有没有办法做到这一点,并额外适应甚至没有触摸启动事件的浏览器?在对此进行研究时,看起来 BlackBerry OS5 不支持
touchstart,因此还需要依赖该浏览器的点击事件。

附录:

也许更全面的问题是:

使用 jQuery,是否可以/推荐使用相同的绑定处理触摸交互和鼠标交互?

理想情况下,答案是肯定的。如果没有,我确实有一些选择:

  1. 我们使用 WURFL 来获取设备信息,因此可以创建我们自己的设备矩阵。根据设备,我们将使用 touchstart 或 click。

  2. 通过 JS 检测浏览器中的触摸支持(我需要对此进行更多研究,但似乎这是可行的)。

但是,这仍然存在一个问题:支持 BOTH 的设备怎么样。我们支持的一些手机(即诺基亚和黑莓)既有触摸屏 又有
键盘。所以那种让我回到原来的问题……有没有办法以某种方式同时允许两者?


阅读 87

收藏
2022-06-23

共1个答案

小编典典

更新 :查看 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
});
2022-06-23