我遇到了一个问题,每当我给元素添加我的.noscroll
类时,页面就会滚动到顶部。这样,即使出现遮罩层,滚动条仍然可见但变灰。
我知道是addClass()
函数造成了这个问题,因为当我注释掉那一行代码时,遮罩层弹出时它就不会滚动到顶部。
jQuery
$('a').click(function(e) {
//reset default anchor behavior
e.preventDefault();
//add noscroll class to body
$("body").addClass("noscroll");
//open overlay box
openOverlayBox();
});
< p > openOverlayBox()
函数是一个在浏览器全屏覆盖并带有黑色遮罩层的简单函数。
CSS
body.noscroll{
position: fixed;
width: 100%;
overflow-y: scroll;
}
正文 HTML
<a href="#">Test</a>
如何在给body添加.noscroll
类后保持滚动位置不变?
编辑1:我想实现与Facebook相同的效果。如果您查看图片或视频,则会显示覆盖层,滚动条被变灰但滚动位置保持不变。
编辑2:我找到了一个非常接近的解决方案来解决我的问题,但唯一的问题是这不会将滚动条变灰,而是仅删除它。当内容居中时,因为body的滚动条被隐藏了,所以它仍然会使内容向右跳动一点。
编辑3:在Cuberto的回答和我的一些研究之后,我发现了需要做的事情。然而,我不知道该如何开始做。但这就是应该解决它的方法。当打开覆盖层时,我需要将我的主div设置为position:fixed
并设置一个负的top值,以达到滚动位置不变的效果。退出覆盖层时,应删除position:fixed;
和top
属性,并设置与打开覆盖层时相同的滚动位置。