Ось моє рішення, яке я використовував у додатках.
Я вимкнув переповнення тіла і розмістив весь html веб-сайту всередині контейнерів div. Контейнери веб-сайту мають переповнення, і тому користувач може прокрутити сторінку, як очікувалося.
Потім я створив спільний div (#Prevent) з вищим z-індексом, який охоплює весь веб-сайт. Оскільки #Prevent має вищий z-індекс, він перекриває контейнер веб-сайту. Коли видно #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