防止touchmove默认(浏览器滚动)直到满足条件?

时间:2015-02-03 18:18:33

标签: javascript jquery touch

目标是有一个组件,在这种情况下是一个旋转木马,当用户从左向右移动手指时响应touchmove事件,但不会阻止默认滚动,即使触摸如果用户将手指在y轴上移动超过某个阈值,则会产生相关组件。

或者,更明显的是,我需要在触摸设备上禁用浏览器滚动,直到touchmove甚至表示没问题,然后重新启用它。

尽管进行了几个小时的修补,但我只能完全禁用浏览器滚动或者不能全部禁用它。有条件地禁用似乎不想工作。

基本逻辑是:

  1. 记录手指上的坐标(触摸开始)。
  2. 在touchmove上,检查Y差异是否大于200px。
  3. 如果是,请允许默认的浏览器滚动,禁用touchmove侦听器。
  4. 如果没有,请阻止默认滚动,向左/向右滚动。
  5. 我已经在最新版的iPad mini上进行了测试。我发现了以下内容:

    1. 在touchstart处理程序中调用preventDefault()会停止该触摸的所有浏览器滚动,在拖动过程中无法重新启用它。

    2. 尝试有条理地阻止dragmove处理程序中的默认行为与touchstart处理程序中的preventDefault相同。也就是说,它会阻止拖动,并忽略条件!

    3. 拖拉机中的这种情况:

      if(Math.abs(MouseMoveDistanceY) < 200){
         if(ev.preventDefault){ev.preventDefault();}
      }
      

      ...永久阻止垂直滚动,即使超出阈值!

      在任何情况下,如果满足条件,我如何在触摸设备和拖拉机处理程序中将控制权交给浏览器滚动?像&#34; unPreventDefault()&#34;会很好。除此之外,还有什么想法?

1 个答案:

答案 0 :(得分:0)

只是一个想法,因为我不能给你一个直接的答案,所以这更多的只是看一个不同的方法..但你看看改变页面,以便在开启时没有任何实际滚动触摸事件?即/固定高度并添加溢出隐藏。

相关问题