这个方法对我来说根本不起作用。
有没有更新的现代方法可以做到这一点?
我的客户总是讨厌它,我还没有找到一个好的方法来禁用它。
弹性滚动是指一旦您到达页面的顶部或底部,这些浏览器就会允许页面“过度滚动”以显示空白区域。我正在努力阻止这种行为。
这里有一种方法可以在 chrome 上禁用它
body {
/* Disables pull-to-refresh and overscroll glow effect.
Still keeps swipe navigations. */
overscroll-behavior-y: none;
}
来自:https://developers.google.com/web/updates/2017/11/overscroll-behavior
如果 CSS hack 在你的情况下没有删除它,那么你可能需要使用 JS 来处理滚动。
不过,我强烈建议不要这样做,因为用户希望滚动以某种方式运行。更不用说让 JS 滚动变得平滑并且像原生滚动一样响应是非常困难的。
我不知道你正在构建什么,所以当然这可能不适用于你的情况,但你通常应该(总是如此,除非你有令人信服的理由反对它)将像这样的常见交互留给操作系统避免让用户感到困惑。您的客户可能不喜欢它,但这是他们的用户所期望的,这应该更重要。
弹性滚动限制现在可以跨浏览器工作 - 将无前缀的 overscoll-behaviour 添加到
html
和 body
。
body, html { overscroll-behavior: none; }
现代浏览器可能已经改变(以为我几年前就解决了这个问题,但旧项目的技术不再有效),但这就是我现在使用的,没有足够严重的用户或个人抱怨来探索 JavaScript 滚动事件-foo:
<style>
html, body {
overscroll-behavior: none;
/* nothing special */
margin: 0; padding: 0;
background-color: #000000; /* anything on-theme */
}
.scrollBody {
display: block;
height: 100vh; /* 100% does not do it */
overflow: scroll;
overscroll-behavior: contain;
}
</style>
<body>
<div class='scrollBody'>
<!-- everything else -->
</div>
</body>
基本上,将滚动分配并约束到紧邻主体内的元素。如果用户在固定或绝对元素(例如页眉或页脚区域)上启动手势,您可能仍然会遇到橡皮筋,因此至少设置
<body>
主题颜色以尽量减少其明显程度。
目前在 Chrome、Safari 和 Edge 中测试良好(在带有触摸板的 macOS 上,这可能是一个因素),如果您在其他环境中进行解决,可能是一个入门线索/方法。