我遇到了一个问题,每当我将.noscroll
类添加到body中时,页面都会滚动到顶部。这样,滚动条仍然可见,但每当覆盖层出现时,滚动条就会变灰。
我知道这是addClass()函数造成的,因为当我注解掉那一行时,当我的覆盖出现时,它不会滚动到顶部。
jQuery查询
$('a').click(function(e) {
//reset default anchor behavior
e.preventDefault();
//add noscroll class to body
$("body").addClass("noscroll");
//open overlay box
openOverlayBox();
});
字符串openOverlayBox()
功能只是一个黑色的浏览器屏幕覆盖。
CSS
body.noscroll{
position: fixed;
width: 100%;
overflow-y: scroll;
}
型
正文HTML
<a href="#">Test</a>
型
如何在将.noscroll
类添加到body中后使滚动位置保持不变?
**编辑1:**我试图实现与Facebook相同的效果。如果您查看图片或视频,则会出现叠加,滚动条变灰,但滚动位置保持不变。
**编辑2:**我发现了一个非常接近我的问题的solution,但唯一的问题是,这并没有使滚动条变灰,而是将其删除。此外,当内容居中时,它仍然会使内容向右跳一点,因为主体的滚动条是隐藏的。
**编辑3:**在Cuberto的回答和我自己的一些研究之后,我发现了需要做些什么才能让它工作我想要的。但是我不知道我将如何开始做它。但这是应该解决的问题。我在打开覆盖时,我需要将我的主div设置为position: fixed
和滚动位置的负值。当退出覆盖时,position: fixed;
和top
属性应该被删除,并设置与打开覆盖时相同的滚动位置。
3条答案
按热度按时间x8diyxa71#
希望你喜欢this fiddle。我把你在你的问题结束时提到的一个,并按照你想要的方式重新工作。
我碰巧在我的网站上做了类似的事情,但我从来没有限制滚动到现在。
JavaScript + jQuery:
字符串
CSS:
型
HTML:
型
原始代码归功于这个答案。代码被高度修改,但归功于该归功的地方。
mitkmikd2#
快速浏览一下Facebook是如何做到这一点的,它是这样的:
字符串
对不起,内联样式。您需要以编程方式将主
div
的top
样式设置为您的滚动位置。mklgxw1f3#
这个问题开始于当你打开模态或任何覆盖时,背景滚动仍然启用,为了防止这种情况,我们添加了overflow:hidden; CSS,它可以在几乎所有的浏览器和操作系统上有效地工作。但是我们在IOS和一些Linux浏览器上有一个问题。所以为了解决这个问题,我们添加了另一个CSS位置:fixed;它解决了这个问题,但它产生了一个新的问题。
添加CSS位置后:固定的;主体在顶部自动滚动,并失去了实际位置,这会给网站造成错误的印象。
我通过在主容器外定义一个变量并仅在模态关闭时更新其值来解决这个问题。然后在模态关闭时再次滚动body到相同的位置。
字符串