如何在禁用和重新启用滚动后停止 Webkit 本机滚动势头

How to stop Webkit native scroll momentum after disabling and re-enabling scroll

我对 Webkit 浏览器和一些自定义滚动行为有棘手的问题。

在我的页面上,我正在检测滚动,当它发生时,通过使 body 具有 overflow:hidden 来禁用滚动,然后为滚动位置执行一些自定义动画逻辑。

Webkit 浏览器 (Mac OS) 的问题是,当我重新启用滚动时,本机滚动似乎仍在缓和,因此将页面向初始滚动事件,在这种情况下是不可取的。

有没有办法disable/reset原生滚动或原生滚动动量?

这里 codepen 说明了这个问题。 然而 您需要将其下载为 zip 并 运行 在本地下载——无论 codepen 对预览容器所做的任何操作都会阻止导致问题的“本机”滚动。在本地查看并“向下”滚动时,您应该看到以下内容:

解决方案是使用与 body 不同的元素作为滚动包装器。显然,这种在将主体重新格式化为可滚动(有溢出)时“恢复”动量滚动的行为是硬编码的,而其他可滚动元素不会表现出这种不可预测的副作用。