EinführungListe der im Artikel enthaltenen APIs:
Wir werden diese APIs Schicht für Schicht analysieren, basierend auf API-Definitionen und Anwendungsszenarien in bekannten Open-Source-Bibliotheken. Es reicht aus, um die meisten Szenarien im Zusammenhang mit der Berechnung der Elementposition bei der Arbeit abzuwickeln. Beachten Sie, dass Sie bei der Verwendung der APIs zur Standortberechnung besonders vorsichtig sein müssen. Eine unsachgemäße Verwendung kann zu Layout-Thrashing führen und die Seitendarstellung beeinträchtigen. scrollenSchauen wir uns zunächst die scrollbezogenen Eigenschaften und Methoden an. Element.scroll()Die Methode Element.scroll() ist eine Element-Schnittstelle, die zum Scrollen zu einer bestimmten Koordinate in einem bestimmten Element verwendet wird. element.scroll(x-Koordinate, y-Koordinate) element.scroll(Optionen)
Das heißt, element.scroll(x,y) verschiebt die Bildlaufleiste des Elements an die entsprechende x,y-Position. Es unterstützt auch den Aufruf von element.scroll(options) und die Übergabe zusätzlicher Konfigurationen: { links: Zahl, oben: Zahl, Verhalten: „sanft“ | „auto“ // sanftes Scrollen oder standardmäßiges direktes Scrollen} Element.scrollHeight/scrollWidthElement.scrollHeight: Diese schreibgeschützte Eigenschaft ist ein Maß für die Höhe des Inhalts eines Elements, einschließlich des Inhalts, der aufgrund eines Überlaufs in der Ansicht nicht sichtbar ist.
Mit anderen Worten: Element.scrollHeight ist immer gleich clientHeight, wenn sich auf dem Element keine Bildlaufleiste befindet.
Einfach ausgedrückt: Wenn ein Element keine Bildlaufleiste hat, sind Bildlauf und Client gleichwertige Werte. Wenn eine Bildlaufleiste vorhanden ist, berechnet der Client nur die Höhe/Breite des aktuell angezeigten Elements, während beim Scrollen nicht nur die Höhe/Breite des aktuell angezeigten Elements berechnet wird, sondern auch die Höhe/Breite des durch die Bildlaufleiste des aktuellen Elements verborgenen Inhalts. Clientbreite/-höhe + [Breite/Höhe des ausgeblendeten Inhalts der Bildlaufleiste] = Bildlaufbreite/-höhe Element.scrollLeft/scrollTop
ScrollLeft/Top sind häufig verwendete APIs zum Bedienen von Bildlaufleisten in der täglichen Arbeit. Es handelt sich um einstellbare Werte. Die Position der Bildlaufleiste kann über verschiedene Werte gesteuert werden. Tatsächlich können diese beiden Attribute denselben Effekt erzielen wie das obige Element.scroll().
Bestimmen Sie, ob das aktuelle Element eine Bildlaufleiste hatDas Erscheinen einer Bildlaufleiste bedeutet, dass der Elementraum größer ist als der Anzeigebereich für den Inhalt. Basierend auf diesem Phänomen können wir die Regeln für die Bestimmung erhalten, ob eine Bildlaufleiste angezeigt werden soll. export const hasScrolled = (Element, Richtung) => { wenn (!element || element.nodeType !== 1) return; wenn (Richtung === "vertikal") { returniere element.scrollHeight > element.clientHeight; } sonst wenn (Richtung === "horizontal") { returniere element.scrollWidth > element.clientWidth; } }; Ermitteln Sie, ob der Benutzer bis zum Ende gescrollt hatWenn auf einem Element eine Bildlaufleiste angezeigt wird, wird im Wesentlichen die Höhe des aktuellen Elements + die Höhe der Bildlaufleiste = die Höhe des Elements selbst (einschließlich des ausgeblendeten Teils) bestimmt. element.scrollHeight - element.scrollTop === element.clientHeight Kunde MouseEvent.clientX/YMounseEvent.clientX/Y ist ebenfalls eine schreibgeschützte Eigenschaft, die die horizontalen Koordinaten des Anwendungsclientbereichs bereitstellt, wenn das Ereignis eintritt. Wenn Sie beispielsweise in die obere linke Ecke des Clientbereichs klicken, sind die ClientX/Y-Werte des Mausereignisses 0, unabhängig davon, ob die Seite über vertikales/horizontales Scrollen verfügt. Tatsächlich wird MouseEvent.clientX/Y relativ zum aktuellen Ansichtsfenster (im Browser sichtbarer Bereich) berechnet. Poste ein ganz einfaches Bild erneut: Element.clientHeight/clientWidthDie Eigenschaften Element.clientWidth/clinetHeight stellen die tatsächliche Breite des Elements in Pixeln dar. Diese Eigenschaft umfasst die Polsterung, schließt jedoch Rahmen, Ränder und vertikale Bildlaufleisten (sofern vorhanden) aus.
Wenn keine Bildlaufleiste angezeigt wird, Element.clientWidth/Height === Element.scrollWidth/Height Element.clientTop/clientLeftElement.clientLeft stellt die Breite des linken Rahmens eines Elements in Pixeln dar. Wenn die Textrichtung des Elements von rechts nach links (RTL) ist und aufgrund eines Inhaltsüberlaufs auf der linken Seite eine vertikale Bildlaufleiste angezeigt wird, umfasst diese Eigenschaft die Breite der Bildlaufleiste. clientLeft schließt den linken Rand und die linke Polsterung nicht ein. clientLeft ist schreibgeschützt. In ähnlicher Weise stellt Element.clientTop die Breite des oberen Rahmens des Elements dar und ist ebenfalls eine schreibgeschützte Eigenschaft. Diese beiden Eigenschaften werden im täglichen Leben selten verwendet, Sie sollten sie jedoch auch kennen, um eine Verwechslung dieser Eigenschaften aufgrund ähnlicher Namen zu vermeiden. Versatz Mausereignis.offsetX/offsetYDie schreibgeschützte Eigenschaft „offsetX/Y“ der Schnittstelle „MouseEvent“ gibt den Versatz zwischen dem Ereignisobjekt und der Polsterkante des Zielknotens in X/Y-Achsenrichtung an. Ich glaube, dass Studenten, die „offest“ verwendet haben, ein tiefes Verständnis für dieses Attribut haben. Es ist der Versatz relativ zur linken/oberen Seite des übergeordneten Elements.
Offsetbreite/OffsethöheHTMLElement.offsetWidth/Height ist eine schreibgeschützte Eigenschaft, die die Layoutbreite/-höhe eines Elements zurückgibt. Die sogenannte Layoutbreite ist relativ zu den oben genannten Werten für clientHeight/Width und offsetHeight/Width. Sie umfasst nicht die Breite/Höhe des Rahmens und der Bildlaufleiste (sofern vorhanden). OffsetWidth/offsetHeight gibt die Layoutbreite/-höhe des Elements zurück, einschließlich der Elementgrenze, der Polsterung der horizontalen/vertikalen Linien, der vertikalen/horizontalen Bildlaufleiste (Scrollbar) (sofern vorhanden) und der durch CSS festgelegten Breite. Versatz oben/linksHTMLElement.offsetLeft ist eine schreibgeschützte Eigenschaft, die den Pixelwert des Versatzes der oberen linken Ecke des aktuellen Elements vom linken Rand des Knotens HTMLElement.offsetParent zurückgibt.
Was ist HTMLElement.offsetParent?
Um es im Klartext auszudrücken: Wenn der übergeordnete Komponentenknoten des aktuellen Elements keine Tabelle, kein td, kein th hat und das Positionsattribut für positionierte Elemente relativ, absolut usw. ist, gibt offsetLeft/offsetTop den Versatz von der linken/oberen Ecke des Textkörpers zurück. Wenn sich unter den Vorgängerelementen ein positioniertes Element (oder das oben erwähnte Tag-Element) befindet, kann es als OffsetParent des Elements bezeichnet werden. Der OffsetLeft/OffsetTop-Wert eines Elements entspricht der Entfernung von der linken Seite seines linken Rands/der oberen Seite seines oberen Rands zum linken Rand seines OffsetParent-Elements. Schauen wir uns dieses Bild an: Berechnen Sie den Abstand des Elements vom KörperWenn wir die Distanz zwischen einem Element und dem Körper ermitteln müssen, aber nicht feststellen können, ob das übergeordnete Element ein positioniertes Element hat (bei der Komponentenentwicklung ist meistens nicht klar, ob der übergeordnete Knoten ein positioniertes Element hat). Zu diesem Zeitpunkt müssen Sie eine Methode implementieren, die dem Offset () von jqery ähnelt: Rufen Sie den Offset des aktuellen Elements relativ zum Textkörper ab.
const getOffsetSize = Funktion(Knoten: beliebig, Offset?: beliebig): beliebig { wenn (!offset) { Versatz = { x: 0, j: 0 }; } wenn (Knoten === Dokument.Body) Offset zurückgeben; offset.x = offset.x + Node.offsetLeft; Offset.y = Offset.y + Node.OffsetTop; gibt getOffsetSize zurück (Node.offsetParent, Offset); }; Hinweis: parentNode kann hier nicht verwendet werden. Wie oben erwähnt, bezieht sich offsetLeft/top auf den Offset von HTMLElement.offsetParent und nicht auf den Offset von parentNode. Element.getBoundingClientRect VerwendungDie Methode Element.getBoundingClientRect() gibt die Größe eines Elements und seine Position relativ zum Ansichtsfenster zurück.
Die von element.getBoundingClientRect () zurückgegebene Höhe und Breite beziehen sich auf die Breite und Höhe des sichtbaren Bereichs des Elements (die konkrete Größe wird durch die Box-Größe bestimmt) und schließen den Inhalt, in dem die Bildlaufleiste ausgeblendet ist, nicht ein.
rectObject = Objekt.getBoundingClientRect(); Der Rückgabewert ist ein DOMRect-Objekt, bei dem es sich um eine Reihe von Rechtecken handelt, die von der Methode getClientRects() des Elements zurückgegeben werden, d. h. die CSS-Randgröße des Elements. Das zurückgegebene Ergebnis ist das kleinste Rechteck, das das gesamte Element enthält und über schreibgeschützte Eigenschaften (links, oben, rechts, unten, x, y, Breite und Höhe) verfügt, die den gesamten Begrenzungsrahmen in Pixeln beschreiben. Andere Eigenschaften als Breite und Höhe werden relativ zur oberen linken Ecke des Ansichtsfensters berechnet. Breite und Höhe werden zum Berechnen der Größe des Elements verwendet und andere Attribute beziehen sich auf die obere linke Ecke des Ansichtsfensters. Das Scrollen innerhalb des Ansichtsfensterbereichs (oder anderer scrollbarer Elemente) wird bei der Berechnung des Begrenzungsrechtecks berücksichtigt. Dies bedeutet, dass sich die oberen und linken Eigenschaftswerte sofort ändern, wenn sich die Scrollposition ändert (ihre Werte sind also relativ zum Ansichtsfenster, nicht absolut). Wenn Sie den Eigenschaftswert relativ zur oberen linken Ecke der gesamten Webseite benötigen, fügen Sie einfach die aktuelle Scrollposition (über window.scrollX und window.scrollY) zu den oberen und linken Eigenschaftswerten hinzu. Auf diese Weise können Sie einen Wert erhalten, der unabhängig von der aktuellen Scrollposition ist. Berechnet, ob das Element im Ansichtsfenster erscheintDer Vorteil besteht darin, dass der Abstand des Elements vom Ansichtsfenster kleiner ist als die Größe des Ansichtsfensters.
So wird der Quellcode der Vue-Lazy-Image-Lazy-Loading-Bibliothek beurteilt. istInAnsicht():boolean { const rect = this.el.getBoundingClientRect() returniere rechteck.oben < fenster.innereHöhe && rechteck.links < fenster.innereBreite } Wenn rect.top < window.innerHeight, bedeutet dies, dass das aktuelle Element bereits auf der Seite erschienen ist, und dasselbe gilt für left. window.getComputedStyle VerwendungDie Methode Window.getComputedStyle() gibt ein Objekt zurück, das die Werte aller CSS-Eigenschaften eines Elements meldet, nachdem das aktive Stylesheet angewendet und alle zugrunde liegenden Berechnungen aufgelöst wurden, die diese Werte enthalten könnten. Auf private CSS-Eigenschaftswerte kann über die vom Objekt bereitgestellte API oder durch einfache Indizierung anhand des CSS-Eigenschaftsnamens zugegriffen werden. let style = window.getComputedStyle(element, [pseudoElt]); Element
pseudoElt Optional
Der zurückgegebene Stil ist ein Live-CSSStyleDeclaration-Objekt, das sich automatisch aktualisiert, wenn sich der Stil des Elements ändert. ZusammenfassenDies ist das Ende dieses Artikels zur Positionsberechnung in js. Weitere relevante Inhalte zur Positionsberechnung in js finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Der Unterschied zwischen ${param} und #{param} in MySQL
>>: Linux verwendet die suid vim.basic-Datei, um eine Rechteausweitung zu erreichen
Ich habe vor Kurzem eine einfache Studie zur Date...
Linux ist derzeit das am weitesten verbreitete Se...
1. Wer ist Tomcat? 2. Was kann Tomcat? Tomcat ist...
Erstellen eines Vue 3.x-Projekts npm init @vitejs...
Inhaltsverzeichnis Ist setState synchron oder asy...
Die MySQL-Funktionen DATE_ADD(date,INTERVAL expr ...
Hintergrund-Threads •Hauptthread Der Kern-Hinterg...
Portainer ist ein hervorragendes grafisches Verwa...
Exportieren einer einzelnen Tabelle mysqldump -u ...
Der Befehl zum Löschen von Bildern im Docker laut...
Wenn wir Vue zur Entwicklung verwenden, kann eine...
Zunächst lautet der HTML-Code zum Einbetten des Vi...
Inhaltsverzeichnis Einführung 1. MySQL Master-Sla...
Auswählen und ändern: Klicken Sie, um den aktuell...
Zum Beginn des neuen Jahres möchte ich meinen Fre...