Hier ist meine Lösung, die ich in Anwendungen verwendet habe.
Ich habe den Body-Überlauf deaktiviert und die gesamte HTML-Website in Container-Divs platziert. Die Website-Container haben einen Überlauf und daher kann der Benutzer die Seite wie erwartet scrollen.
Ich habe dann ein Geschwister-Div (#Prevent) mit einem höheren Z-Index erstellt, der die gesamte Website abdeckt. Da #Prevent einen höheren Z-Index hat, überlappt es den Website-Container. Wenn #Prevent sichtbar ist, schwebt die Maus nicht mehr über den Website-Containern, sodass kein Bildlauf möglich ist.
Sie können natürlich ein anderes Div, wie z. B. Ihr Modal, mit einem höheren Z-Index als #Prevent in das Markup einfügen. Auf diese Weise können Sie Popup-Fenster erstellen, in denen keine Bildlaufprobleme auftreten.
Diese Lösung ist besser, da die Bildlaufleisten nicht ausgeblendet werden (Sprungeffekt). Es erfordert keine Ereignis-Listener und ist einfach zu implementieren. Es funktioniert in allen Browsern, obwohl Sie mit IE7 & 8 herumspielen müssen (abhängig von Ihrem spezifischen Code).
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;
}
}
Deaktivieren / Aktivieren Sie den Bildlauf
PreventScroll('on'); // prevent scrolling
PreventScroll('off'); // allow scrolling