这是我在应用程序中使用过的解决方案。
我禁用了身体溢出功能,并将整个网站html放在了div容器中。网站容器溢出,因此用户可以按预期滚动页面。
然后,我创建了一个具有较高z索引的兄弟div(#Prevent),该索引涵盖了整个网站。由于#Prevent具有较高的z-index,因此它与网站容器重叠。当#Prevent可见时,鼠标不再悬停在网站容器上,因此无法滚动。
当然,您可以在标记中放置另一个div(例如您的模式),其z索引比#Prevent高。这使您可以创建不会出现滚动问题的弹出窗口。
此解决方案更好,因为它不会隐藏滚动条(跳跃效果)。它不需要事件侦听器,并且易于实现。它可以在所有浏览器中使用,尽管使用IE7&8还是要玩(取决于您的特定代码)。
html
<body>
<div id="YourModal" style="display:none;"></div>
<div id="Prevent" style="display:none;"></div>
<div id="WebsiteContainer">
<div id="Website">
website goes here...
</div>
</div>
</body>
的CSS
body { overflow: hidden; }
#YourModal {
z-index:200;
/* modal styles here */
}
#Prevent {
z-index:100;
position:absolute;
left:0px;
height:100%;
width:100%;
background:transparent;
}
#WebsiteContainer {
z-index:50;
overflow:auto;
position: absolute;
height:100%;
width:100%;
}
#Website {
position:relative;
}
jquery / js
function PreventScroll(A) {
switch (A) {
case 'on': $('#Prevent').show(); break;
case 'off': $('#Prevent').hide(); break;
}
}
禁用/启用滚动
PreventScroll('on'); // prevent scrolling
PreventScroll('off'); // allow scrolling