[转载]弹出层禁止页面滚动

在做移动端遮罩层时,发现页面可以上下滚动,踩了 N 个坑之后,总算是解决了这个问题。

禁止滚动

给 body 设置宽高都是 100%,固定在左上角,溢出隐藏的样式。

var body = document.body;
body.style.cssText = ' 100%; height: 100%; position: fixed; top: 0; left: 0; overflow: hidden;';

但是,这样会有 BUG:每次执行这个,都会把页面拉到最顶部,很明显这样是不行的。解决方案如下:

var body = document.body;
var top = body.scrollTop;
body.style.cssText = ' 100%; height: 100%; position: fixed; top: -' + top + 'px; left: 0; overflow: hidden;';

关闭遮罩层时:

body.removeAttribute('style');
body.scrollTop = top;

2018.09.27 更新

document.body.scrollTop 存在兼容性问题,做个判断:

if(document.documentElement.scrollTop){
    top = document.documentElement.scrollTop;
}else if(document.body.scrollTop){
    top = document.body.scrollTop;
}

注意,关闭遮罩层时最好加上 document.documentElement.scrollTop

原文地址:http://blog.xuxiangbo.com/im-40.html

原文地址:https://www.cnblogs.com/edison1412/p/11235887.html