【问题标题】:jQuery live scroll event on mobile (work around)移动设备上的 jQuery 实时滚动事件(解决方法)
【发布时间】:2013-09-16 04:43:00
【问题描述】:

老问题: 当用户在移动网站或应用程序(网络视图)上滚动元素时触发滚动事件。

我正在寻找的只是当用户在移动设备上滚动我的页面时访问正确的scrollTop() 值,而不是在用户停止时获取它。

我确信某处有解决方法,如果我是正确的,这个限制是由 iOS 设置的,并且在过去几年中一直在讨论它。

我已经尝试实现本机滚动模拟器,但它们似乎都没有按照我的意愿工作,老实说,如果我真正想要的是在用户滚动时持续使用scrollTop(),这似乎有点过头了。

我目前正在考虑在 touchStart 上启动一个计数器并在 touchStop 上停止它,但有些事情告诉我我在浪费时间。

有帮助吗?

【问题讨论】:

    标签: javascript jquery ios events scroll


    【解决方案1】:

    我必须走 iScroll 路线才能做到这一点。我在这里写了我的实现:https://stackoverflow.com/a/23140322/229315

    【讨论】:

      【解决方案2】:

      使用 jQuery:

      $('body').bind('touchmove', function(e) { 
          console.log($(this).scrollTop()); // Replace this with your code.
      });
      

      这应该会在用户滚动时为您提供一致的 scrollTop 值流,但要小心,因为即使用户只是将手指放在屏幕上,它也会触发。

      请注意,如果您使用 jQuery >= 1.7,则首选绑定方法是 .on() 而不是我在示例中使用的 .bind() 方法。在那种情况下,我的例子是

      $('body').on({
          'touchmove': function(e) { 
              console.log($(this).scrollTop()); // Replace this with your code.
          }
      });
      

      来源:https://github.com/dantipa/pull-to-refresh-js/blob/master/jquery.plugin.pullToRefresh.js

      【讨论】:

      • 这看起来很有希望,我将在我的应用程序上对其进行测试,然后接受答案(如果它有效)。实际上,从技术上讲,您应该已经回答了问题并且演示有效。好的,我现在接受它。
      • 不确定我做错了什么,但这个解决方案对我来说甚至不如滚动事件那么好......
      • 这似乎在使用 chrome 设备工具栏(并通过单击鼠标和拖动滚动)时有效,但实际上不适用于移动设备。
      【解决方案3】:

      也许你可以看看iScroll 是如何在绑定到touchmove 事件的_move 方法中做到的:https://github.com/cubiq/iscroll/blob/master/src/core.js#L152

      这有点复杂,但我相信你会弄明白的。您也可以只使用 iScroll 开始并绑定到他们的 scrollmove 事件(我不确定它是如何在 iScroll 5 上调用的,但它在 iScroll 4 中是 onScrollMove)。 that.y 会给你正确的值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-23
        • 1970-01-01
        • 2016-07-11
        • 2013-04-28
        • 1970-01-01
        相关资源
        最近更新 更多