触摸事件:处理与点击不同的滑动?

时间:2014-02-06 18:05:09

标签: javascript jquery backbone.js touch modernizr

我有一个Backbone应用程序,我正在使用Modernizr。

在触摸设备上,我无法滑动页面将其向下滚动,因为触摸事件会触发Backbone侦听器和一系列复杂事件,而不是通常的页面滚动。

这是我的代码:

 events: function () {
  if (this.modernizr.touch) {
    return {
      'touchstart .hover': 'onTouchStart'
    };
  } else {
    return {
      'mousemove .hover': 'onMouseMove'
    };
  }
}
// onTouchStart and onMouseMove both fire a listener

我应该使用什么事件来区分滑动和点击,以便滑动允许用户正常移动页面? (我不能轻易在触摸设备上进行测试,只是因为你知道这不是一个懒惰的问题。)

1 个答案:

答案 0 :(得分:0)

您的onTouchStart函数是否正在调用event.preventDefault()?如果是这样,那将停止触发本机滑动滚动行为的事件。删除该调用应该允许用户正常滚动。

This HTML5 Rocks article详细介绍了触摸事件如何传播/级联。


旁注:你在这里使用的模式做了一些危险的假设IMO:

  • 如果Modernizr.touchfalse,仅绑定鼠标事件,具有混合设备的用户(具有触控功能的笔记本电脑等)将无法使用鼠标/触控板;为什么不直接绑定两个事件?
  • 某些浏览器/设备无法触发touchstart mousemove(键盘用户,Windows智能手机等),因此无法使用此功能;如果你绑定到click事件那么作为后备,那么你可以覆盖它们

我最近wrote an article关于我认为可以涵盖所有可能性的“黄金模式”,如果你有兴趣的话。

当然,如果这些处理程序提供的功能不重要,这些事情可能不是问题。