使用 -webkit-overflow-scrolling:touch 时的当前滚动位置 - Safari iOS 的 JavaScript 事件

阅读时长 4 分钟读完

在移动端 Web 中,我们经常会使用 -webkit-overflow-scrolling: touch 样式来实现可滚动区域的平滑滚动效果。然而,这个样式会影响到浏览器默认的 scroll 事件,导致 scrollTopscrollLeft 属性无法正常工作。那么我们该如何获取当前滚动位置呢?本文将对此做出详细的解答,并提供一些示例代码以供参考。

为什么会出现这个问题?

当我们使用 -webkit-overflow-scrolling: touch 样式时,浏览器会将滚动事件交给渲染引擎处理,以实现更加流畅的滚动效果。但是,由于 scroll 事件是由浏览器自身处理的,因此在这种情况下,scrollTopscrollLeft 属性不再能够直接获取滚动位置。

如何解决这个问题?

使用 scroll 事件的 targetTouches 属性

在滚动过程中,我们可以通过监听 touchmove 事件,并利用 event.targetTouches[0].pageYevent.targetTouches[0].pageX 来获取当前触摸点的位置。结合之前的滚动位置,即可计算当前的滚动位置。示例代码如下:

-- -------------------- ---- -------
----- ------- - ----------------------------------------------
--- ------- ---------------

-------------------------------------- ------- -- -
  ------ - -----------------------------
  -------------- - ------------------
---

------------------------------------- ------- -- -
  ----- ------ - ---------------------------- - -------
  ----- --------- - -------------- - -------
  -----------------------
---

使用自定义事件

我们也可以使用自定义事件来获取当前的滚动位置。具体实现方式是,每当滚动发生变化时,触发一个自定义事件,并将当前的滚动位置作为事件的参数传递出去。示例代码如下:

-- -------------------- ---- -------
----- ------- - ----------------------------------------------

-------- --------------------- -
  ----- ----- - --- --------------------- - ------- - ---------- ----------------- - ---
  -----------------------------
-

---------------------------------- -- -- -
  ----------------------
---

------------------------------------- -- -- -
  ----------------------
---

--------------------------------- -- -- -
  ----------------------
---

---------------------------------- ------- -- -
  ------------------------------------
--

总结

在使用 -webkit-overflow-scrolling: touch 样式时,我们无法直接获取到浏览器默认的 scrollTopscrollLeft 属性。但是,我们可以通过监听 touchmove 事件或者使用自定义事件来获取当前的滚动位置。希望这篇文章能帮助您解决相关的问题,同时也希望您能在实际开发中多加实践,深入学习前端技术。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/30844

纠错
反馈