Die Ereignisse abzusagen, wie in der akzeptierten Antwort, ist meiner Meinung nach eine schreckliche Methode :/
Stattdessen habe ich position: fixed; top: -scrollTop();
unten.
Demo: https://jsfiddle.net/w9w9hthy/5/
Von meinem jQuery Popup-Projekt: https://github.com/seahorsepip/jPopup
//Freeze page content scrolling
function freeze() {
if($("html").css("position") != "fixed") {
var top = $("html").scrollTop() ? $("html").scrollTop() : $("body").scrollTop();
if(window.innerWidth > $("html").width()) {
$("html").css("overflow-y", "scroll");
}
$("html").css({"width": "100%", "height": "100%", "position": "fixed", "top": -top});
}
}
//Unfreeze page content scrolling
function unfreeze() {
if($("html").css("position") == "fixed") {
$("html").css("position", "static");
$("html, body").scrollTop(-parseInt($("html").css("top")));
$("html").css({"position": "", "width": "", "height": "", "top": "", "overflow-y": ""});
}
}
Dieser Code berücksichtigt Breite, Höhe, Bildlaufleisten und Seitensprünge.
Mögliche Probleme mit obigem Code behoben:
- Breite, bei fester Einstellung der Position kann die Breite des HTML-Elements kleiner als 100% sein
- Höhe, wie oben
- Scrollbar, wenn die Position fixiert wird, hat der Seiteninhalt keine Scrollbar mehr, auch wenn er vorher eine Scrollbar hatte, was zu einem horizontalen Seitensprung führt
- pagejump, wenn die Position fest eingestellt ist, ist scrollTop nicht mehr wirksam, was zu einem vertikalen Pagejump führt
Wenn jemand irgendwelche Verbesserungen zu den oben genannten Seite einfrieren / unfreeze Code lassen Sie mich wissen, so kann ich diese Verbesserungen zu meinem Projekt hinzufügen.
14 Stimmen
Wenn sie noch angezeigt wird, ist der Benutzer darauf trainiert, zu denken, dass sie funktionieren muss. Wenn es sich nicht bewegt oder nicht reagiert, wird das mentale Modell des Benutzers, wie die Seite funktioniert, durchbrochen und führt zu Verwirrung. Ich würde einfach einen besseren Weg finden, um mit dem Scrollen während der Animation umzugehen, z. B. die Animation zu stoppen.
0 Stimmen
Eine andere Lösung: stackoverflow.com/questions/9280258/