Mit jQuery möchte ich das Scrollen des Körpers deaktivieren:
Meine Idee ist:
- einstellen
body{ overflow: hidden;}
- Erfassen Sie den Strom
scrollTop();/scrollLeft()
- Binden Sie an das Body-Scroll-Ereignis und setzen Sie scrollTop / scrollLeft auf den erfassten Wert.
Gibt es einen besseren Weg?
Aktualisieren:
Bitte sehen Sie mein Beispiel und einen Grund dafür unter http://jsbin.com/ikuma4/2/edit
Ich bin mir bewusst, dass jemand denken wird, "warum verwendet er nicht nur position: fixed
auf dem Panel?".
Bitte schlagen Sie dies nicht vor, da ich andere Gründe habe.
Antworten:
Der einzige Weg, den ich gefunden habe, ist ähnlich dem, was Sie beschrieben haben:
Wenn Sie dann bereit sind, das Scrollen erneut zuzulassen, machen Sie alles rückgängig.
Bearbeiten: Kein Grund, warum ich Ihnen den Code nicht geben kann, da ich mir die Mühe gemacht habe, ihn auszugraben ...
quelle
auto
, würde er überschrieben. Ich musste die vorhandene Einstellung beibehalten, damit auch etwas Overhead entsteht.html
undbody
mitoverflow: hidden
nicht ausreichen? Am Ende brauchen wir immer noch den Event-Handler.Dadurch wird das Scrollen vollständig deaktiviert:
Etwas wiederherstellen:
Getestet auf Firefox und Chrome.
quelle
height: 100%
Scrollen an der aktuellen Position ohne Springen effektiv gesperrt - zumindest auf dem neuesten Chrome.Versuche dies
quelle
$('#element').off('scroll touchmove mousewheel');
body
Scrollen deaktivieren und dennoch das Scrollen in anderen untergeordneten Elementen zulassen, die habenoverflow: scroll
?Ich stelle nur ein wenig die Lösung von tfe vor . Insbesondere habe ich ein zusätzliches Steuerelement hinzugefügt, um sicherzustellen, dass der Seiteninhalt nicht verschoben wird (auch als Seitenverschiebung bezeichnet ), wenn die Bildlaufleiste auf eingestellt ist
hidden
.Zwei Javascript-Funktionen
lockScroll()
undunlockScroll()
kann definiert werden, die jeweils zu sperren und die Seite blättern zu entsperren.wo ich davon ausgegangen bin, dass die
<body>
keine anfängliche Marge hat.Beachten Sie, dass die obige Lösung zwar in den meisten praktischen Fällen funktioniert, jedoch nicht endgültig ist, da für Seiten, die beispielsweise einen Header mit enthalten, weitere Anpassungen erforderlich sind
position:fixed
. Lassen Sie uns mit einem Beispiel auf diesen Sonderfall eingehen. Angenommen, zu habenmit
Dann sollte man in Funktionen
lockScroll()
und Folgendes hinzufügenunlockScroll()
:Achten Sie abschließend auf einen möglichen Anfangswert für die Ränder oder Polster.
quelle
marginRight
undmarginLeft
:)Sie können diesen Code verwenden:
quelle
Versuchen Sie Folgendes, um das Scrollen auszuschalten:
zurücksetzen:
quelle
Ich habe ein jQuery-Plugin geschrieben, um dies zu handhaben: $ .disablescroll .
Es verhindert das Scrollen von Mausrad-, Touchmove- und Tastendruckereignissen, wie z Page Down.
Hier gibt es eine Demo .
Verwendung:
quelle
Sie können eine Funktion anhängen, um Ereignisse zu scrollen und ihr Standardverhalten zu verhindern.
https://jsfiddle.net/22cLw9em/
quelle
Ein Liner zum Deaktivieren des Bildlaufs einschließlich der mittleren Maustaste.
edit : jQuery ist sowieso nicht erforderlich, unten wie oben in Vanilla JS (das heißt, keine Frameworks, nur JavaScript):
this.documentElement.scrollTop - Standard
this.body.scrollTop - IE-Kompatibilität
quelle
$("body").css("overflow", "hidden");
$("body").css("overflow", "initial");
quelle
Kannst du nicht einfach die Körpergröße auf 100% einstellen und den Überlauf verbergen? Siehe http://jsbin.com/ikuma4/13/edit
quelle
Jemand hat diesen Code gepostet, der das Problem hat, dass die Bildlaufposition bei der Wiederherstellung nicht beibehalten wird. Der Grund ist, dass Menschen dazu neigen, es auf HTML und Körper oder nur auf den Körper anzuwenden, aber es sollte nur auf HTML angewendet werden. Auf diese Weise bleibt die Bildlaufposition bei Wiederherstellung erhalten:
Etwas wiederherstellen:
quelle
'overflow': 'auto',
verwenden'overflow': 'initial',
Dies kann für Ihre Zwecke funktionieren oder nicht, aber Sie können jScrollPane erweitern , um andere Funktionen auszulösen , bevor das Scrollen ausgeführt wird. Ich habe dies gerade erst ein wenig getestet, aber ich kann bestätigen, dass Sie hineinspringen und das Scrollen vollständig verhindern können. Alles was ich getan habe war:
<script type="text/javascript" src="script/jquery.jscrollpane.js"></script>
positionDragY(destY, animate)
FunktionStarten Sie events.html und Sie sehen ein normales Bildlauffeld, das aufgrund Ihrer Codierung nicht gescrollt wird.
Auf diese Weise können Sie die Bildlaufleisten des gesamten Browsers steuern (siehe fullpage_scroll.html).
Vermutlich besteht der nächste Schritt darin, eine andere Funktion aufzurufen, die ausgelöst wird und Ihre Verankerungsmagie ausführt, und dann zu entscheiden, ob Sie mit dem Scrollen fortfahren möchten oder nicht. Sie haben auch API-Aufrufe, um scrollTop und scrollLeft festzulegen.
Wenn Sie weitere Hilfe benötigen, geben Sie an, wo Sie gerade sind!
Hoffe das hat geholfen.
quelle
Ich habe hier eine Antwort gegeben, die helfen könnte: eingefügt jQuery simplemodal disable scrolling
Es zeigt, wie Sie die Bildlaufleisten deaktivieren, ohne den Text zu verschieben. Sie können die Teile über simplemodal ignorieren.
quelle
Wenn Sie nur das Scrollen mit der Tastaturnavigation deaktivieren möchten, können Sie das Keydown-Ereignis überschreiben.
quelle
Versuchen Sie diesen Code:
quelle
Sie können das Fenster mit einem scrollbaren Div abdecken, um das Scrollen des Inhalts auf einer Seite zu verhindern. Durch Ausblenden und Anzeigen können Sie Ihre Schriftrolle sperren / entsperren.
Mach so etwas:
quelle
Für Leute, die Layouts (via
margin:0 auto;
) zentriert haben , ist hier eine Zusammenstellung derposition:fixed
Lösung zusammen mit @tfe vorgeschlagenen Lösung.Verwenden Sie diese Lösung, wenn beim Einrasten von Seiten Probleme auftreten (da die Bildlaufleiste angezeigt / ausgeblendet wird).
…kombiniert mit…
… Und schließlich das CSS für
.modal-noscroll
…Ich wage zu sagen , dass dies eher eine richtige Lösung ist , als alle anderen Lösungen gibt, aber ich habe getestet es nicht , dass gründlich noch ...: P
Bearbeiten: Bitte beachten Sie, dass ich keine Ahnung habe, wie schlecht dies auf einem Touch-Gerät funktionieren könnte (sprich: explodieren).
quelle
Sie können dazu auch DOM verwenden. Angenommen, Sie haben eine Funktion, die Sie wie folgt aufrufen:
Und das ist alles! Hoffe das hilft zusätzlich zu all den anderen Antworten!
quelle
Das habe ich letztendlich getan:
CoffeeScript:
Javascript:
quelle
Ich bin mir nicht sicher, ob jemand meine Lösung ausprobiert hat. Dieser funktioniert auf dem gesamten Körper / HTML, kann aber zweifellos auf jedes Element angewendet werden, das ein Bildlaufereignis auslöst.
Setzen und deaktivieren Sie scrollLock einfach nach Bedarf.
Hier ist das Beispiel JSFiddle
Hoffe, dieser hilft jemandem.
quelle
Ich denke, die beste und sauberste Lösung ist:
Und mit jQuery:
Diese Ereignis-Listener sollten das Scrollen blockieren. Entfernen Sie sie einfach, um das Scrollen wieder zu aktivieren
quelle