suchen
HeimWeb-FrontendCSS-TutorialVerhindern Sie das Scrollen von Seiten, wenn ein Modal geöffnet ist

Verhindern

Sind Sie jemals auf diese Situation gestoßen: Öffnen Sie eine Modalbox, scrollen Sie darin, schließen Sie sie und die Seite springt zu einem anderen Ort?

Dies liegt daran, dass das Modal -Feld nur ein Element auf der Seite ist, es kann an Ort und Stelle bleiben, aber der Rest der Seite funktioniert immer noch ordnungsgemäß.

Manchmal spielt dies keine Rolle, z. B. wenn die Bildschirmhöhe genau der Ansichtsfensterhöhe entspricht. In anderen Fällen tritt jedoch ein Bildlaufproblem auf. Die gute Nachricht ist, dass wir dies mit einigen CSS- (und JavaScript) -Tricks verhindern können.

Beginnen Sie mit einer einfachen Lösung

Wir können das Problem des Seitenscrollens erheblich reduzieren, wenn das Modalbox geöffnet wird, indem die Höhe des gesamten Körpers auf die vollständige Ansichtsfensterhöhe und den vertikalen Überlauf eingestellt wird, wenn das Modalbox geöffnet wird:

 <code>body.modal-open { height: 100vh; overflow-y: hidden; }</code>

Dies ist gut, aber wenn wir vor dem Öffnen der Modalbox durch die Seitenelemente gescrollt haben, wird es eine leichte horizontale Umlagerung geben. Die Ansichtsfensterbreite nimmt um etwa 15 Pixel zu, was genau die Breite der Scrollbar ist. Passen wir die rechte Körpersfüllung ein wenig an, um dies zu vermeiden.

 <code>body { height: 100vh; overflow-y: hidden; padding-right: 15px; /* 避免宽度重排*/ }</code>

Beachten Sie, dass die Höhe des Modalbox weniger als die Ansichtsfensterhöhe für diese Methode sein muss. Andernfalls ist die Bildlaufleiste am Körper erforderlich.

Was tun auf dem Handy?

Diese Lösung funktioniert sowohl auf Desktop als auch auf Android Mobile gut. IOS Safari benötigt jedoch mehr Verarbeitung, da der Körper beim Klicken und Bewegen auf dem Touchscreen immer noch scrollt, wenn sich das Modalfeld öffnet.

Wir können den Körper als Lösung auf die feste Positionierung einstellen:

 <code>body { position: fixed; }</code>

Es ist jetzt in Ordnung! Bei der Berührung des Bildschirms reagiert der Körper nicht. Hier gibt es jedoch immer noch ein "kleines" Problem. Unter der Annahme, dass der Auslöser des Modal -Box am Ende der Seite steht, klicken wir, um ihn zu öffnen. sehr gut! Aber jetzt scrollen wir automatisch nach oben auf dem Bildschirm, was genauso verwirrend ist wie das Scrolling -Verhalten, das wir lösen wollen.

Hoppla!

Wir müssen also JavaScript verwenden

Wir können JavaScript verwenden, um die Blase von Touch -Ereignissen zu vermeiden. Wir alle wissen, dass es eine Hintergrundschicht geben sollte, wenn die Modalbox geöffnet wird. Leider ist StopPropagation in iOS etwas umständlich, um mit Touch -Events zu arbeiten. Aber PreventDefault funktioniert sehr gut. Dies bedeutet, dass wir Ereignishörern zu jedem im Modal -Box enthaltenen DOM -Knoten hinzufügen müssen - nicht nur auf der Hintergrund- oder Modal -Box -Ebene. Die gute Nachricht ist, dass viele JavaScript -Bibliotheken dies tun können, einschließlich der bewährten JQuery.

Noch etwas: Was ist, wenn wir in die Modalbox scrollen müssen? Wir müssen immer noch die Reaktion auf das Touch -Ereignis auslösen, aber wir müssen das Blasen immer noch stoppen, wenn es die obere oder untere Unterseite der Modalbox erreicht. Dies scheint sehr kompliziert zu sein, deshalb haben wir das Problem nicht vollständig gelöst.

Verbesserte feste Körpermethode

Was wir verwenden, ist:

 <code>body { position: fixed; }</code>

Wenn wir die oberste Scrollenposition kennen und zu unserem CSS hinzufügen, scrollt der Körper nicht zurück zum Oberteil des Bildschirms, sodass das Problem gelöst wird. Wir können JavaScript verwenden, um das Scroll -Top zu berechnen und diesen Wert zum Körperstil hinzuzufügen:

 // Wenn das Modalbox angezeigt wird, benötigen wir einen festen Körper
document.body.style.position = 'behoben';
document.body.style.top = `-$ {window.scrolly} px`;

// Wenn die Modalbox versteckt ist, müssen wir sie oben im Scroll -Positionsdokument.
document.body.style.top = '';

Dies funktioniert, aber es gibt immer noch ein wenig Leck, nachdem die Modalbox geschlossen wurde. Insbesondere wenn das Modalbox geöffnet ist und der Körper auf fest gesetzt ist, scheint die Seite seine Bildlaufposition verloren zu haben. Also müssen wir den Ort abrufen. Ändern wir unser JavaScript, um dieses Problem zu lösen.

 // Wenn die Modalbox versteckt ist ...
const Scrolly = document.body.style.top;
document.body.style.position = '';
document.body.style.top = '';
window.scrollto (0, parseInt (scrolly || '0') * -1);

geschafft! Der Körper scrollt nicht mehr, wenn die Modalbox geöffnet ist und bleibt in der Bildlaufposition, wenn die Modalbox geöffnet und geschlossen ist. Es lebe!

Verhindern Sie das Scrollen von Seiten, wenn ein Modal geöffnet ist

Das obige ist der detaillierte Inhalt vonVerhindern Sie das Scrollen von Seiten, wenn ein Modal geöffnet ist. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Zur Verteidigung der ternären ErklärungZur Verteidigung der ternären ErklärungApr 22, 2025 am 11:25 AM

Vor einigen Monaten war ich in Hacker News (wie einer) und stieß auf einen (jetzt gelöschten) Artikel über die Nichtverwendung von If -Anweisungen. Wenn Sie neu in dieser Idee sind (wie ich

Verwenden der Web -Sprach -API für mehrsprachige ÜbersetzungenVerwenden der Web -Sprach -API für mehrsprachige ÜbersetzungenApr 22, 2025 am 11:23 AM

Seit den frühen Tagen der Science -Fiction haben wir über Maschinen geträumt, die mit uns sprechen. Heute ist es alltäglich. Trotzdem die Technologie für die Herstellung

Jetpack Gutenberg BlöckeJetpack Gutenberg BlöckeApr 22, 2025 am 11:20 AM

Ich erinnere mich, als Gutenberg in den Kern entlassen wurde, weil ich an diesem Tag in Wordcamp war. Inzwischen sind einige Monate vergangen, also stelle ich mir immer mehr von uns vor

Erstellen einer wiederverwendbaren Paginationskomponente in VueErstellen einer wiederverwendbaren Paginationskomponente in VueApr 22, 2025 am 11:17 AM

Die Idee hinter den meisten Webanwendungen besteht darin, Daten aus der Datenbank abzurufen und sie dem Benutzer bestmöglich vorzustellen. Wenn wir dort mit Daten umgehen

Verwenden Sie 'Box Shadows' und Clip-Pad zusammenVerwenden Sie 'Box Shadows' und Clip-Pad zusammenApr 22, 2025 am 11:13 AM

Lassen Sie sich ein wenig Schritt für Schritt von einer Situation machen, in der Sie nicht ganz das tun können, was zu sinnvoll ist, aber Sie können es trotzdem mit CSS-Tricks erledigen. In diesem

Alles über Mailto: LinksAlles über Mailto: LinksApr 22, 2025 am 11:04 AM

Sie können eine neue E -Mail eröffnen. Lassen Sie sich eine kleine Reise in dieses Feature machen. Es ist ziemlich einfach zu bedienen, aber wie bei allem

Es ist ziemlich cool, wie Netlify CMS mit jedem Flat -Datei -Generator funktioniertEs ist ziemlich cool, wie Netlify CMS mit jedem Flat -Datei -Generator funktioniertApr 22, 2025 am 11:03 AM

Little Confession hier: Als ich Netlify CMS auf einen Blick zum ersten Mal sah, dachte ich: Cool, vielleicht versuchen ich das eines Tages, wenn ich CMSS für ein neues Projekt erkundet habe. Dann

Testen auf visuelle Regressionen mit PercyTesten auf visuelle Regressionen mit PercyApr 22, 2025 am 11:02 AM

Es ist eine herkulische Aufgabe zu testen

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

SublimeText3 Englische Version

SublimeText3 Englische Version

Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

mPDF

mPDF

mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

MinGW – Minimalistisches GNU für Windows

MinGW – Minimalistisches GNU für Windows

Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.

Herunterladen der Mac-Version des Atom-Editors

Herunterladen der Mac-Version des Atom-Editors

Der beliebteste Open-Source-Editor