


So verwenden Sie JS, um die absolute Position von DOM-Elementen zu ermitteln
Dieses Mal zeige ich Ihnen, wie Sie JS verwenden, um die absolute Position von DOM-Elementen zu ermitteln Schauen Sie mal rein. Beim Scrollen und Animieren von Seiten wird häufig die absolute Position von DOM-Elementen ermittelt, z. B. die schwebende Navigation auf der linken Seite dieses Artikels. Wenn die Seite dorthin scrollt, wird sie im Dokument gerendert Normaler Fluss Wenn die Seite darüber hinaus scrollt, wird ihre Position immer auf der linken Seite angehalten.
In diesem Artikel werden verschiedene Methoden zum Ermitteln der absoluten Position von
DOM-Elementenund die entsprechende Kompatibilität detailliert beschrieben. Informationen dazu, wie Sie die DOM-Elementhöhe und Scrollhöhe erhalten, finden Sie im Artikel Breite, Höhe und Scrollhöhe des Ansichtsfensters.
ÜbersichtDies sind die Dokumente und Standards, die den in diesem Artikel beteiligten APIs als Referenz entsprechen:
offsetTop/offsetLeft
HTMLElement.offsetTop wird verwendet, um die Position des aktuellen Elements (mit Ausnahme des oberen Rands) relativ zum Positionierungscontainer abzurufen. Das heißt,
Wenn alle Vorgängerelemente statisch positioniert sind position:static;
(dies ist die Standardsituation), stellt offsetTop
den Höhenunterschied vom oberen Rand des Dokuments dar (der obere Rand des Dokuments kann sein). Aus dem Ansichtsfenster herausgerollt, kann diese Höhe größer als die Höhe des Ansichtsfensters sein.
Wenn es einen Vorfahren von absolut positioniertem position:absolute/fixed
gibt, wird offsetTop
relativ zu diesem Element sein. Um den Höhenunterschied relativ zum oberen Rand des Dokuments zu erhalten, müssen Sie daher rekursiv aufrufen:
function getOffsetTop(el){ return el.offsetParent ? el.offsetTop + getOffsetTop(el.offsetParent) : el.offsetTop }
el.offsetParent
ist der Positionierungscontainer des aktuellen Elements Absolut positionierter Vorfahrenknoten, dieses Attribut Der Wert ist null
.
Kompatibilität und Einschränkungen: Dieses Attribut wird von fast allen Browsern unterstützt. Sein Wert ist 0, wenn das Element ausgeblendet ist, hat aber im IE9 keine Auswirkung.
clientTop/clientLeft
Lassen Sie sich nicht vom Namen täuschen, Element.clientTop bezieht sich auf die Breite des oberen Randes des aktuellen Elements ein ganzzahliger Wert. Immer gleich getComputedStyle()
Gibt den Wert des Attributs border-top-width
zurück, gerundet auf eine Ganzzahl.
Warum? In der DOM-Terminologie bezieht sich „Client“ immer auf die Rendering-Box (Auffüllung + Inhaltsgröße) ohne Rand. Der Versatz bezieht sich immer auf das Rendering-Feld, das den Rand enthält (Rand + Innenabstand + Inhaltsgröße), und clientTop
ist die Differenz zwischen den beiden Oberteilen, also die Randbreite. Informationen zum Konzept von Boxen finden Sie unter: CSS-Anzeigeattribut und Boxmodell
Kompatibilität und Einschränkungen: Gleich wie offsetTop/offsetLeft
.getBoundingClientRect()
Element.getBoundingClientRect() wird verwendet, um die Größe des Elements und seine Position relativ zum Ansichtsfenster abzurufen, und gibt ein DOMRect-Objekt zurück.
> document.querySelector('span').getBoundingClientRect() DOMRect {x: 2.890625, y: 218.890625, width: 1264, height: 110, top: 218.890625, …} bottom: 328.890625 height: 110 left: 2.890625 right: 1266.890625 top: 218.890625 width: 1264 x: 2.890625 y: 218.890625
Wenn Sie die Position relativ zur oberen linken Ecke des Dokuments erhalten möchten, müssen Sie die Bildlaufposition zu den obigen top
und left
hinzufügen. Der folgende Code stammt von MDN und ist mit fast allen Browsern kompatibel:
// For scrollX (((t = document.documentElement) || (t = document.body.parentNode)) && typeof t.scrollLeft == 'number' ? t : document.body).scrollLeft // For scrollY (((t = document.documentElement) || (t = document.body.parentNode)) && typeof t.scrollTop == 'number' ? t : document.body).scrollTop
Kompatibilität und Einschränkungen: Es ist auch eine Funktion des CSSOM View Module, aber es ist mit fast allen Browsern kompatibel. Bitte beachten Sie
https://caniuse.com/#feat=getboundingclientrect IE Die obere linke Ecke des Fensters ist möglicherweise nicht 0,0. In IE9 können Sie sie wie folgt auf 0,0 setzen:
<meta>
.getClientRects()
Element.getClientRects() wird verwendet, um eine Sammlung von DOMRect zu erhalten, die allen CSS-Boxmodellen im entspricht DOM-Element.
Wenn es sich um ein Element auf Blockebene handelt, sollte es nur ein Element in der zurückgegebenen Menge geben, nämlich die Größe und Position des Blocks. Wenn es sich jedoch um ein Inline-Element (oder ein Element innerhalb einer SVG-Datei) handelt, wird jedes darin enthaltene CSS-Feld zurückgegeben. Zum Beispiel ein gewöhnliches <span></span>
, das standardmäßig umbrochen ist:
> document.querySelector('span').getClientRects() DOMRectList {0: DOMRect, 1: DOMRect, 2: DOMRect, length: 5} 0: DOMRect {x: 2.890625, y: 262.890625, width: 1264, height: 22, top: 262.890625, …} 1: DOMRect {x: 2.890625, y: 284.890625, width: 1264, height: 22, top: 284.890625, …} 2: DOMRect {x: 2.890625, y: 306.890625, width: 768, height: 22, top: 306.890625, …}
Dieses <span></span>
hat drei Zeilen, von denen die dritte Zeile weniger als eine Zeile lang ist. Jeder Zeilenumbruch bildet ein neues CSS-Feld .
Kompatibilität und Einschränkungen: In IE8 und niedriger wird das IE-einzigartige TextRectangle
-Objekt (anstelle von ClientRect
) zurückgegeben. Dieses Objekt verfügt nicht über die Attribute width
und height
Es können keine Eigenschaften festgelegt werden. Referenz: https://webplatform.github.io/docs/dom/HTMLElement/getClientRects/
.getComputedStyle()
Fenster. getComputedStyle() kann alle berechneten CSS-Eigenschaften eines Elements abrufen. Bei einfachen absolut positionierten Elementen kann die Position des Elements über top
, left
und andere von dieser API zurückgegebene Attributwerte ermittelt werden. Zum Beispiel:
let btn = document.querySelector('#btn-scroll-up') let {top, left} = getComputedStyle(btn) console.log('top:', top, 'left:', left)
.getComputedStyle()
Es gibt auch eine nützliche Verwendung, um Stilinformationen wie die Größe und Position von Pseudoelementen abzurufen:
// 以下代码来自: https://developer.mozilla.org/en-US/docs/Web/API/Window/getComputedStyle var h3 = document.querySelector('h3'); var result = getComputedStyle(h3, ':after').content; console.log('the generated content is: ', result); // returns ' rocks!'
兼容性和限制:.getComputedStyle()
几乎兼容所有浏览器,可参考 https://caniuse.com/#search=getComputedStyle。但它返回的值是 CSS 属性,用它获取绝对位置时要注意值的类型。例如 left
可能是 13px
这样的绝对值,也可能是 auto
这样的 CSS 关键字。
总结 获取 DOM 元素相对于文档的位置,可以直接使用 offsetTop
; 获取 DOM 元素相对于视口的位置,可以使用 .getBoundingClientRect()
; 获取 SVG 元素或行内元素的 CSS 盒子(比如用来做文本高亮时),可以使用 .getClientRects()
; 获取绝对定位元素、伪元素的渲染后 CSS 属性,可以使用 .getComputedStyle()
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
Das obige ist der detaillierte Inhalt vonSo verwenden Sie JS, um die absolute Position von DOM-Elementen zu ermitteln. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Einführung Ich weiß, dass Sie es vielleicht seltsam finden. Was genau muss JavaScript, C und Browser tun? Sie scheinen nicht miteinander verbunden zu sein, aber tatsächlich spielen sie eine sehr wichtige Rolle in der modernen Webentwicklung. Heute werden wir die enge Verbindung zwischen diesen drei diskutieren. In diesem Artikel erfahren Sie, wie JavaScript im Browser ausgeführt wird, die Rolle von C in der Browser -Engine und wie sie zusammenarbeiten, um das Rendern und die Interaktion von Webseiten voranzutreiben. Wir alle kennen die Beziehung zwischen JavaScript und Browser. JavaScript ist die Kernsprache der Front-End-Entwicklung. Es läuft direkt im Browser und macht Webseiten lebhaft und interessant. Haben Sie sich jemals gefragt, warum Javascr

Node.js zeichnet sich bei effizienten E/A aus, vor allem bei Streams. Streams verarbeiten Daten inkrementell und vermeiden Speicherüberladung-ideal für große Dateien, Netzwerkaufgaben und Echtzeitanwendungen. Die Kombination von Streams mit der TypeScript -Sicherheit erzeugt eine POWE

Die Unterschiede in der Leistung und der Effizienz zwischen Python und JavaScript spiegeln sich hauptsächlich in: 1 wider: 1) Als interpretierter Sprache läuft Python langsam, weist jedoch eine hohe Entwicklungseffizienz auf und ist für eine schnelle Prototypentwicklung geeignet. 2) JavaScript ist auf einen einzelnen Thread im Browser beschränkt, aber Multi-Threading- und Asynchronen-E/A können verwendet werden, um die Leistung in Node.js zu verbessern, und beide haben Vorteile in tatsächlichen Projekten.

JavaScript stammt aus dem Jahr 1995 und wurde von Brandon Ike erstellt und realisierte die Sprache in C. 1.C-Sprache bietet Programmierfunktionen auf hoher Leistung und Systemebene für JavaScript. 2. Die Speicherverwaltung und die Leistungsoptimierung von JavaScript basieren auf C -Sprache. 3. Die plattformübergreifende Funktion der C-Sprache hilft JavaScript, auf verschiedenen Betriebssystemen effizient zu laufen.

JavaScript wird in Browsern und Node.js -Umgebungen ausgeführt und stützt sich auf die JavaScript -Engine, um Code zu analysieren und auszuführen. 1) abstrakter Syntaxbaum (AST) in der Parsenstufe erzeugen; 2) AST in die Kompilierungsphase in Bytecode oder Maschinencode umwandeln; 3) Führen Sie den kompilierten Code in der Ausführungsstufe aus.

Zu den zukünftigen Trends von Python und JavaScript gehören: 1. Python wird seine Position in den Bereichen wissenschaftlicher Computer und KI konsolidieren. JavaScript wird die Entwicklung der Web-Technologie fördern. Beide werden die Anwendungsszenarien in ihren jeweiligen Bereichen weiter erweitern und mehr Durchbrüche in der Leistung erzielen.

Sowohl Python als auch JavaScripts Entscheidungen in Entwicklungsumgebungen sind wichtig. 1) Die Entwicklungsumgebung von Python umfasst Pycharm, Jupyternotebook und Anaconda, die für Datenwissenschaft und schnelles Prototyping geeignet sind. 2) Die Entwicklungsumgebung von JavaScript umfasst Node.JS, VSCODE und WebPack, die für die Entwicklung von Front-End- und Back-End-Entwicklung geeignet sind. Durch die Auswahl der richtigen Tools nach den Projektbedürfnissen kann die Entwicklung der Entwicklung und die Erfolgsquote der Projekte verbessert werden.

Ja, der Motorkern von JavaScript ist in C. 1) Die C -Sprache bietet eine effiziente Leistung und die zugrunde liegende Steuerung, die für die Entwicklung der JavaScript -Engine geeignet ist. 2) Die V8-Engine als Beispiel wird sein Kern in C geschrieben, wobei die Effizienz und objektorientierte Eigenschaften von C kombiniert werden.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

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

Heißer Artikel

Heiße Werkzeuge

DVWA
Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software

Sicherer Prüfungsbrowser
Safe Exam Browser ist eine sichere Browserumgebung für die sichere Teilnahme an Online-Prüfungen. Diese Software verwandelt jeden Computer in einen sicheren Arbeitsplatz. Es kontrolliert den Zugriff auf alle Dienstprogramme und verhindert, dass Schüler nicht autorisierte Ressourcen nutzen.

SublimeText3 Linux neue Version
SublimeText3 Linux neueste Version

Dreamweaver CS6
Visuelle Webentwicklungstools

PHPStorm Mac-Version
Das neueste (2018.2.1) professionelle, integrierte PHP-Entwicklungstool
