Javascript iOS上的Jquery mobile-动量滚动防止调用单击处理程序

Javascript iOS上的Jquery mobile-动量滚动防止调用单击处理程序,javascript,jquery,jquery-mobile,cordova,Javascript,Jquery,Jquery Mobile,Cordova,基本上和标题听起来一样 如果我实现了溢出滚动触摸,即iOS上类似本机的动量滚动,在滚动的“减速”阶段,任何点击都无法注册。这有什么原因吗?或者一种防止这种情况的方法?Mobile Safari不会从滚动事件期间注册的触摸中合成点击事件。如果要侦听触摸事件,请为其注册处理程序:touchstart、touchend、touchmove,等等 警告:我广泛使用jQuery,jquerymobile一点也不使用,所以如果在点击合成的事件处理行为上存在差异,这个答案并不能反映这一点 演示: 在Mobi

基本上和标题听起来一样


如果我实现了溢出滚动触摸,即iOS上类似本机的动量滚动,在滚动的“减速”阶段,任何点击都无法注册。这有什么原因吗?或者一种防止这种情况的方法?

Mobile Safari不会从滚动事件期间注册的触摸中合成
点击事件。如果要侦听触摸事件,请为其注册处理程序:
touchstart
touchend
touchmove
,等等

警告:我广泛使用jQuery,jquerymobile一点也不使用,所以如果在点击合成的事件处理行为上存在差异,这个答案并不能反映这一点

演示:

  • 在Mobile Safari中加载页面
  • 有关被捕获事件的日志,请参阅“控制台”面板
  • 有关事件处理代码,请参见“JavaScript”面板
首先,在不滚动的情况下点击“输出”面板,注意传播的事件是:

  • touchstart
    :手指轻触面板
  • touchend
    :手指松开面板
  • mousedown
    :Safari合成事件
  • mouseup
    :Safari合成事件
  • 单击
    :Safari合成事件
现在滚动“输出”面板,然后点击它停止滚动,注意传播的事件是:

  • touchstart
    :手指轻触面板开始拖动
  • touchmove
    scroll
    事件的循环,表示手指拖动面板和面板滚动作为响应
  • touchend
    :手指松开面板
  • 一些
    scroll
    事件表示面板以动量滚动
  • touchstart
    :手指轻触面板以停止滚动
  • 滚动
    :如果触发事件,则表示滚动减速
  • touchend
    :手指松开面板

希望这有帮助。

很有意义,谢谢,很好的解释和示例。现在不太确定解决这个问题的最佳方法。绑定到touchend事件?这取决于您试图完成的任务。如果您想在用户触摸时立即看到某些内容,请使用
touchstart
,但请注意,用户可能正在“轻弹”以继续或加速滚动。如果要确保事件是停止滚动的触摸,则必须有状态地管理
滚动
触摸(开始|结束)
事件,这同样取决于您试图完成的操作。抱歉,我刚刚看到了这一点。基本上,如果内容仍在“减速”,那么点击页面底部的导航栏就不起作用。单击/触摸导航栏可简单地停止减速。这是jquerymobilev1.4的内部版本