Oto moje rozwiązanie, którego używałem w aplikacjach.
Wyłączyłem przepełnienie treści i umieściłem cały html witryny wewnątrz kontenera div. Kontenery witryny są przepełnione, dlatego użytkownik może przewijać stronę zgodnie z oczekiwaniami.
Następnie utworzyłem rodzeństwo div (#Prevent) z wyższym indeksem Z, który obejmuje całą witrynę. Ponieważ #Prevent ma wyższy indeks Z, nakłada się na kontener witryny. Kiedy #Prevent jest widoczne, mysz nie jest już najeżdżana na kontenery witryny, więc przewijanie nie jest możliwe.
Możesz oczywiście umieścić inny element div, na przykład modalny, z indeksem Z wyższym niż #Prevent w znaczniku. Pozwala to na tworzenie wyskakujących okienek, które nie cierpią z powodu problemów z przewijaniem.
To rozwiązanie jest lepsze, ponieważ nie ukrywa pasków przewijania (wpływa na przeskok). Nie wymaga detektorów zdarzeń i jest łatwy do wdrożenia. Działa we wszystkich przeglądarkach, chociaż z IE7 i 8 musisz się bawić (w zależności od konkretnego kodu).
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;
}
#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;
}
}
wyłącz / włącz przewijanie
PreventScroll('on');
PreventScroll('off');