解决因动态隐藏滚动条导致屏幕水平抖动问题
这里面有一些小技巧:得到滚动条宽度,动态添加padding值。代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>固定定位</title>
<style type="text/css">
*{margin:0;padding:0;border:0;background: #ccc;}
.ston_wrap{width:100%;height:10000px;}
.ston_box{width:500px;height: 600px;position:fixed;top:50%;margin-top: -300px;left: 50%;margin-left: -250px;background: #aaa;display: none;}
.ston_container{height: 1000px;width: 980px;margin:0 auto;background: #ffd;}
.ston_bigbox{width: 100%;overflow: hidden;box-sizing:border-box;}
</style>
</head>
<body>
<div class="ston_bigbox" id="ston_bigbox">
<div class="ston_wrap" id="ston_wrap">
<div class="ston_btn" id="ston_btn"><a href="javascript:void(0)">打开</a></div>
<div class="ston_container">
</div>
</div>
<div class="ston_box" id="ston_box">
<div class="ston_btn" id="ston_btn_close"><a href="javascript:void(0)">关闭</a></div>
<h1>窗口内容</h1>
</div>
</div>
<script type="text/javascript">
window.onload=function(){
function getScrollWidth() {
var noScroll, scroll, oDiv = document.createElement("DIV");
oDiv.style.cssText = "position:absolute; top:-1000px; width:100px; height:100px; overflow:hidden;";
noScroll = document.body.appendChild(oDiv).clientWidth;
oDiv.style.overflowY = "scroll";
scroll = oDiv.clientWidth;
document.body.removeChild(oDiv);
return noScroll-scroll;
};
var ston_width=getScrollWidth();
console.log(ston_width)
var ston_box,ston_body,ston_btn,ston_wrap,ston_bigbox;
ston_box=document.getElementById('ston_box');
ston_btn=document.getElementById('ston_btn');
ston_wrap=document.getElementById('ston_wrap');
ston_bigbox=document.getElementById('ston_bigbox');
ston_btn_close=document.getElementById('ston_btn_close');
ston_body=document.body;
ston_btn.onclick=function(){
ston_body.style.overflowY='hidden';
ston_bigbox.style.paddingRight=ston_width+'px';
ston_box.style.display='block';
};
ston_btn_close.onclick=function(){
ston_box.style.display='none';
ston_bigbox.style.paddingRight=0;
ston_body.style.overflowY="scroll";
};
}
</script>
</body>
</html>
浙公网安备 33010602011771号