ChatGPT解决这个技术问题 Extra ChatGPT

禁用正文滚动

我想完全禁用 HTML body 上的滚动。我尝试了以下选项:

溢出:隐藏; (不工作,没有禁用滚动,它只是隐藏了滚动条)

位置:固定; (这行得通,但它完全滚动到顶部,这对于这个特定的应用程序是不可接受的)

我找不到这两个选项的任何替代方案,还有吗?

您为哪个元素应用了溢出:隐藏?
你到底想在这里实现什么?你的最终目标是什么?
显示相关代码将更容易为您提供帮助。
溢出:隐藏;是要走的路。如果它不起作用,那么您的 css 中还有其他问题。尝试 html, body {overflow: hidden;} 如果这不起作用尝试 * {overflow: hidden;} 并尝试找出问题所在

p
pavel

设置 heightoverflow

html, body {margin: 0; height: 100%; overflow: hidden}

http://jsfiddle.net/q99hvawt/


在“正文”之前忘记了“html”。
当您有一个具有固定位置的覆盖元素时,无法在 iOS 上工作。
您可以只添加“溢出”:“隐藏”,它会正常工作。
这个解决方案并没有立即对我有用,但在检查后“边距”在某处被覆盖。设置该元素的“边距:0;”成功了。
有时您更喜欢使用 height: 100vh ; )
I
IKavanagh

如果 body 标记不执行任何您也可以编写的操作,HTML css 可以正常工作

<body scroll="no" style="overflow: hidden">

在这种情况下,覆盖应该在body标签上,它更容易控制,但有时会让人头疼。


这不是有效的 HTML5
@mbomb007 你能评论一下这里与 HTML5 相关的错误吗?
@Ethan scroll 属性在 <body> 标记上无效。在我能找到的任何规范中,它都没有被列为有效。 w3schools; MDN; Quackit
j
joebjoe

这篇文章很有帮助,但只是想分享一个可能对其他人有所帮助的替代方案:

设置 max-height 而不是 height 也可以解决问题。就我而言,我正在禁用基于类切换的滚动。当容器的高度小于视口的高度时设置 .someContainer {height: 100%; overflow: hidden;} 会拉伸容器,这不是您想要的。设置 max-height 说明了这一点,但如果内容更改时容器的高度大于视口的高度,仍会禁用滚动。


这节省了我在桌面浏览器上的时间,而没有滚动顶部的不必要的副作用。但不适用于移动浏览器(iphone5s 和 android)。
b
bvdb

为此,请在 <body> 元素上添加 2 个 CSS 属性。

body {
   height: 100%;
   overflow-y: hidden;
}

如今,有许多新闻网站需要用户创建一个帐户。通常他们会在大约一秒钟内完全访问页面,然后他们会显示一个弹出窗口,并阻止用户向下滚动。

https://i.stack.imgur.com/0Z2cs.png

编辑

此外,一些网站(例如 Quora)也会使部分文本变得模糊。通常,他们通过应用以下 CSS 来做到这一点。

filter: blur(3px);

这隐藏了滚动条。但是,问题是专门要求隐藏滚动条的替代方法
@DataGeek ,这不仅隐藏了滚动条,还停止了向下滚动的能力。据我了解,这就是我们所要求的。即不仅隐藏它,而且使它无法向下滚动。
M
Martin Grönlund

使用反应 >= 17.8?

想有条件地这样做吗?

useEffect 来救援!

function useImperativeDisableScroll({ element, disabled }) {
    useEffect(() => {
        if (!element) {
            return
        }

        element.style.overflowY = disabled ? 'hidden' : 'scroll'

        return () => {
            element.style.overflowY = 'scroll'
        }
    }, [disabled])
}

您可以将其与例如

useImperativeDisableScroll({ element: document.body, disabled: true })

根据您的用例,您可能会有更好的运气

useImperativeDisableScroll({
    element: document.scrollingElement,
    disabled: true
})

但请注意,在撰写本文时,您可能需要填充 document.scrollingElement

有用的链接:

https://developer.mozilla.org/en-US/docs/Web/API/document/scrollingElement

https://drafts.csswg.org/cssom-view/#dom-document-scrollingelement

https://caniuse.com/document-scrollingelement

https://github.com/yangg/scrolling-element


M
Maizied Hasan Shuvo

你为什么不试试这个:

<style type="text/css">
html, body {
  overflow: hidden;
}
</style>

E
Embedded_Mugs

如果您对页面滚动到顶部感到满意。你可以做:

position: fixed;

在您不想滚动的元素上。我知道这不是您想要的答案,但我正在直接为那些在谷歌上搜索此问题的人回答标题。


S
Sharhabeel Hamdan

这将防止页面滚动:

body, html {
  overflow: hidden
}

A
Anup Bangale

HTML

<body id="appBody">
....
</body>

JS

function disableBodyScroll(){
 const element = document.querySelector("#appBody");
 element.classList.add("stop-scroll");
}

function enableBodyScroll(){
 const element = document.querySelector("#appBody");
 element.classList.remove("stop-scroll");
}

CSS

 .stop-scroll {
      margin: 0;
      height: 100%;
      overflow: hidden;
    }

bbc 似乎使用了上面的一些组合,可以通过设置类似 height: 200vh;最大高度:200vh;溢出:自动;在主要元素上。他们实际上如何阻止滚动并不明显。例如bbc.co.uk/news/uk-england-tyne-58925807
也可以通过禁用javascript来规避