在Next Js中将body.overflow设置为hidden后,无法冻结滚动

7kqas0il  于 2023-04-11  发布在  其他
关注(0)|答案(1)|浏览(114)

我在我的Nextjs中遇到了这个问题,即使在我将document.body.style.overflow设置为hidden之后,我也无法冻结页面滚动。
这就是代码:https://codesandbox.io/p/sandbox/gallant-leavitt-i0fz2c?file=%2Fpages%2Findex.tsx&selection=%5B%7B%22endColumn%22%3A28%2C%22endLineNumber%22%3A13%2C%22startColumn%22%3A27%2C%22startLineNumber%22%3A13%7D%5D
如你所见:在第11-14行,我单击冻结按钮,它禁用滚动。enter image description here
结果:页面仍然可滚动。
请让我知道这个问题的解决方案。

5jvtdoz2

5jvtdoz21#

除了overflow:hidden之外,还需要添加position:fixed

document.body.style.cssText = "overflow: hidden; position:fixed;";

阻止滚动会丢失滚动位置。因此,当重新启用滚动时,它会将滚动位置重置到页面顶部,而不是用户离开的位置。为了防止这种情况,您需要设置scrollTop位置。

const scrollTop = (document.documentElement || document.body).scrollTop;
document.body.style.cssText = `overflow: hidden; position:fixed; margin-top: -${scrollTop}px;`;

相关问题