Finden erste scrollbare Eltern
Habe ich diese situation, in der ich scrollen zu müssen) ein element in den viewport. Das problem ist, dass ich nicht weiß, welches element ist die durchlaufbaren. Zum Beispiel in der Porträt-der Körper ist die durchlaufbaren und im Querformat sein ein anderes element (und es gibt weitere situation, die das Scrollbar-element)
Nun die Frage, da ein element, das muss gescrollt werden, in den Arbeitsbereich, was ist der beste Weg zu finden, Ihre erste scrollbare Eltern ?
Ich habe setup eine demo hier. Mit der Taste können Sie Umschalten zwischen den zwei verschiedenen Situationen
<div class="outer">
<div class="inner">
<div class="content">
...
<span>Scroll me into view</span>
</div>
</div>
</div>
Den Körper ist die durchlaufbaren oder .outer
Irgendwelche Vorschläge ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur prüfen, ob die scrollbar sichtbar ist, wenn sich nicht an die Eltern.
inline
Eltern,clientHeight
wird 0 sein, und es wird hier zurückgegeben. Besser zu ignorieren Knoten mitclientHeight
0.let overflowY = window.getComputedStyle(node).overflowY;
let isScrollable = overflowY !== 'visible' && overflowY !== 'hidden';
if (isScrollable && node.scrollHeight > node.clientHeight) {
Dies ist eine Reine JS-port des jQuery UI
scrollParent
Methode, die cweston Sprach von. Ich ging mit diesem eher als die akzeptierte Antwort, die Lösung, die nicht die scroll-Eltern, wenn es keine Inhalte überlauf noch.Dem Unterschied, dass mit meinem Anschluss ist, dass, wenn kein Elternteil gefunden wird, mit dem richtigen Wert für die CSS -
overflow
Eigenschaft, die ich an die Rückkehr der<body>
element. JQuery-UI, stattdessen kehrte diedocument
Objekt. Dies ist merkwürdig, da Werte wie.scrollTop
können abgerufen werden von der<body>
aber nicht diedocument
..scrollTop
werden kann, Lesen Sie aus dem Dokument:document.documentElement.scrollTop
aber diedocument.body.scrollTop
zurück0
unabhängig von der aktuellen scroll-position (können Sie testen, in die devtools hier auf SO). Das würde bedeuten, dass es sinnvoll ist, die Jquery-UI gibt das Dokument anstelle des Körpers.$("body").scrollTop()
gibt immer0
,$(document).scrollTop()
gibt Ihre aktuelle scroll-position.document.scrollingElement
zu Adresse @Skeets Punkt. Vielleicht noch variiert zwischen den Browsern?Wenn Sie die Verwendung von jQuery UI können Sie die
scrollParent
Methode. Haben Sie einen Blick auf die API oder die Quelle.Aus der API:
Wenn Sie nicht mit jQuery UI sind aber mit Hilfe von jQuery, dann gibt es alternative unabhängige Bibliotheken, die ähnliche Funktionen wie:
jquery-scrollparent
die Antwort mit den meisten Stimmen nicht in allen Fällen funktionieren
scrollHeight > clientHeight
werden kanntrue
auch wenn es keinen Scrollbalken.Fand ich diesen gist-Lösung https://github.com/olahol/scrollparent.js/blob/master/scrollparent.js#L13
^ total Kredit https://github.com/olahol wer schrieb den code.
Umgestalteten es zu
es6
:können Sie es verwenden, wie:
Ich denke, dass Sie das wollen.
JS:
CSS:
HTML:
Verwendung von google chrome dev-tools, wenn Sie einen Bildlauf durchgeführt haben teilweise unten auf der Seite, überprüfen Sie die Seite, wählen Sie die DOM-Knoten, die Sie denken, Sie seien derjenige, der wird gescrollt. Dann ziehen Sie die Konsole (ESC Taste aus der Registerkarte Elemente der dev-tools), und geben Sie
$0.scrollTop
. Dies wird drucken Sie die aktuelle scroll-position des Elements. Wenn es NICHT 0 ist, dann werden Sie wissen, dass dies das element ist, das gescrollt werden.Aufbauend auf weiter auf die @Web_Designer Antwort,
Wenn Sie auf der Durchreise sind die
jQuery object
für das element aus und sind immer folgende Fehlermeldung,Dann versuchen Sie übergeben nur die
Dom Node element
was btw befindet sich im array-Schlüssel0
wenn das element ist ein einzelnes element. ZB.