我有一个移动的侧边栏,当它显示时,它从屏幕左侧占用300px。我检查它是否显示一个名为isOpen的变量。
<Navbar isOpen={isOpen} setIsOpen={setIsOpen} />
<div className={isOpen ? "content behind" : "content"}>
//content
</div>
字符串
侧边栏处于活动状态时,如何禁用导航栏下div的点击和滚动?
.content.behind{
pointer-events: none;
}
型
我试着使用这个,但滚动仍然是可能的。
.content.behind{
overflow: hidden;
}
型
我也试过这样做,但是当显示侧边栏时,会显示内容部分的顶部,因为溢出是隐藏的。
我也在github上找到了这个自定义钩子。useScrollBlock它的工作,但当我使用它,scrollable是禁用的整个身体。应该可以滚动到侧边栏。
2条答案
按热度按时间o4tp2gmn1#
我假设
.contant
是可滚动元素(而不是整个主体)。在这种情况下,在下面的示例中同时使用pointer-events: none
和overflow: hidden
似乎可以很好地工作。你可以向下滚动,打开侧边栏,列表的滚动位置不会改变。但是,当滚动条隐藏时,您会注意到列表会水平移动(至少在Windows上,滚动条不是像macOS/iOS中那样的覆盖):
在任何情况下,您的问题可能是特定于设备的,或者它取决于您的整体HTML结构。你可以在
#content
上添加一个覆盖层,这将阻止用户滚动它或与它的内容交互:6qqygrtg2#
为了防止与页面的主要内容进行任何交互,通常要做的是创建一个div,放置在内容的顶部(但低于模态/侧边栏):
字符串
然后在CSS中用一个
z-index
来定义它,它大于主内容中的所有内容,但低于模态中使用的内容(我的模态有z-index: 1000
):型
至于隐藏滚动条,这取决于页面设计的其他部分(您还没有分享),但
overflow
的隐藏通常需要在body
元素处。它可以通过CSS类来完成,但我通过useEffect来完成:型
你可以在下面的代码片段中找到一个工作示例: