Heim  >  Artikel  >  Web-Frontend  >  Wie kann das Scrollen eines übergeordneten Elements verhindert werden, wenn das innere Element seine Scroll-Grenzen erreicht?

Wie kann das Scrollen eines übergeordneten Elements verhindert werden, wenn das innere Element seine Scroll-Grenzen erreicht?

DDD
DDDOriginal
2024-10-27 17:00:02695Durchsuche

How to Prevent Parent Element Scroll When Inner Element Reaches its Scroll Bounds?

Verhindern des Scrollens eines übergeordneten Elements an den Scrollgrenzen des inneren Elements

Bei der Arbeit mit einem schwebenden Element mit fester Position und scrollbarem Inhalt ist es oft wünschenswert, dies zu tun Verhindern Sie, dass das übergeordnete Element das Scroll-Ereignis übernimmt, wenn das innere Element seine Ober- oder Unterseite erreicht. Dies kann besonders frustrierend sein, wenn das innere Element über einen begrenzten Scrollbereich verfügt.

Fehlgeschlagene Versuche mit Ereignis-Bubbling

Anfangs wurde angenommen, dass stoppropagation() das effektiv blockieren könnte Ereignis, das zum übergeordneten Element sprudelt. Es wurde jedoch festgestellt, dass sich das Ereignis trotz Eingabe der angegebenen Funktion immer noch ausbreitete.

Mausrad-Ereignisbehandlungslösung

Der richtige Ansatz bestand darin, das Mausrad-Ereignis direkt zu behandeln. Durch die Erkennung des WheelDelta des Ereignisses und die Verwendung browserspezifischer Normalisierungsfaktoren ist es möglich, die Bildlaufrichtung (nach oben/unten) und den Betrag zu bestimmen, um den das Element gescrollt wird.

Edge Case Handling

Der Faktor „關鍵“ behandelte Randfälle, bei denen das Mausradereignis die Bildlaufposition über die Grenzen des inneren Elements hinaus verschieben würde. Indem überprüft wird, ob die Bildlaufposition oben oder unten war, und diese entsprechend angepasst wird, kann in diesen Fällen verhindert werden, dass das übergeordnete Element scrollt.

Arbeitslösung

Der folgende jQuery-Code verwendet diesen Ansatz:

<code class="javascript">$(".Scrollable").bind('mousewheel DOMMouseScroll', function(ev) {
    var $this = $(this),
    scrollTop = this.scrollTop,
    scrollHeight = this.scrollHeight,
    height = $this.innerHeight(),
    delta = (ev.type == 'DOMMouseScroll' ? ev.originalEvent.detail * -40 : ev.originalEvent.wheelDelta),
    up = delta > 0;

    if (!up && -delta > scrollHeight - height - scrollTop) {
        $this.scrollTop(scrollHeight);
        ev.preventDefault();
    } else if (up && delta > scrollTop) {
        $this.scrollTop(0);
        ev.preventDefault();
    }
});</code>

Durch das Abfangen und Normalisieren des Mausrad-Ereignisses stellt dieser Code sicher, dass die Bildlaufposition des inneren Elements innerhalb ihrer Grenzen bleibt, und verhindert so effektiv, dass das übergeordnete Element ggf. scrollt.

Das obige ist der detaillierte Inhalt vonWie kann das Scrollen eines übergeordneten Elements verhindert werden, wenn das innere Element seine Scroll-Grenzen erreicht?. 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