ca2*_*s7l 7 html javascript css css3
我想打开一个超越身体滚动的模态层.为了实现这一点,当显示图层时,我将身体溢出设置为隐藏,并将溢出设置为在模态图层上滚动.在视觉上,一个滚动条取代另一个.
在后台我有一个固定位置和100%宽的顶部栏.当身体溢出被设置为隐藏时,100%宽度div(顶部栏)占据滚动条空间并且其元素向右移动.
如何防止这些元素移动?
我试图计算(javascript)滚动条的宽度,并在设置主体溢出时:隐藏,给右边距:"滚动条宽度"到顶部栏.那没用.
还尝试在顶栏的右端设置一个虚拟div,其中溢出设置为滚动并强制它在打开图层时显示滚动条.我们的想法是用另一个滚动条占用丢失滚动条的空间,仅在顶部容器上.这几乎起作用但创造了1或2px闪烁.还不够好.
var body = $('body'),
main = $('.main'),
open_modal = $('.open-modal'),
close_modal = $('.close-modal'),
modal_container = $('.modal-container'),
toggleModal = function() {
body.toggleClass('body-locked');
modal_container.toggleClass('dp-block');
};
open_modal.on('click', toggleModal);
close_modal.on('click', toggleModal);
Run Code Online (Sandbox Code Playgroud)
小智 7
基本上...
打开模态时,将菜单宽度设置为当前宽度,并设置一个window.onresize事件处理程序,将菜单大小调整为主体宽度.
关闭模态后,删除固定宽度和window.onresize处理程序并将菜单返回到其初始状态.
本着less === more我的精神,我尽可能地简化你的代码.
var body = $('body');
var menu = $('#topBarFixed');
function toggleModal() {
menu.css('width', body.hasClass('locked') ? '' : menu.width());
window.onresize = body.hasClass('locked') ? '' : function () {
menu.css('width', body.width());
}
body.toggleClass('locked');
}
body.on('click', '.open-modal, .close-modal', toggleModal);Run Code Online (Sandbox Code Playgroud)
body {
padding-top: 40px;
height: 1000px;
background: lightblue;
}
body.locked {
height: 100%;
overflow: hidden;
}
.modal-container {
display: none;
overflow-y: scroll;
position: fixed;
top: 0; right: 0;
height: 100%; width: 100%;
background-color: rgba(255, 255, 255, 0.3);
z-index: 400;
}
body.locked .modal-container {
display: block !important;
}
.modal {
height: 600px;
width: 200px;
margin: 50px auto;
background: indianred;
}
#topBarFixed {
width: 100%;
background-color: lightgray;
position: fixed;
top: 0;
left: 0;
text-align:center;
display: inline-block;
z-index: 200;
}
.topBarContent {
display: inline-flex;
flex-direction: row;
flex-wrap: nowrap;
justify-content: space-between;
align-items: center;
}
.inner1 {
width:30px;
line-height: 40px;
}
.open-modal {
position: relative;
top: 400px;
}Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="topBarFixed">
<div class="topBarContent">
<div id="inner" class="inner1">div</div>
<div id="inner" class="inner1">div</div>
<div id="inner" class="inner1">div</div>
<div id="inner" class="inner1">div</div>
<div id="inner" class="inner1">div</div>
</div>
</div>
<p>Scroll down to open layer</p>
<button class="open-modal">Open layer</button>
<div class="modal-container">
<div class="modal">
<button class="close-modal">Close layer</button>
</div>
</div>Run Code Online (Sandbox Code Playgroud)