Ich möchte die Position eines Elements relativ zum Ansichtsfenster des Browsers ermitteln (das Ansichtsfenster, in dem die Seite angezeigt wird, nicht die gesamte Seite). Wie geht das in JavaScript?
Danke vielmals
javascript
Waleed Eissa
quelle
quelle
Antworten:
Die vorhandenen Antworten sind jetzt veraltet. Die native
getBoundingClientRect()
Methode gibt es schon eine ganze Weile und macht genau das, was die Frage verlangt. Außerdem wird es in allen Browsern unterstützt (einschließlich IE 5, wie es scheint!).Von der MDN-Seite :
Der zurückgegebene Wert ist ein TextRectangle-Objekt, das schreibgeschützte Eigenschaften für links, oben, rechts und unten enthält, die das Rahmenfeld in Pixel beschreiben, wobei sich das obere linke relativ zum oberen linken Rand des Ansichtsfensters befindet .
Du benutzt es so:
quelle
getBoundingClientRect().top
ist nicht in meinem IE11, es gibt 0 zurück. Haben Sie eine Lösung.In meinem Fall habe ich, um beim Scrollen sicher zu sein, die window.scroll zur Gleichung hinzugefügt:
Dadurch kann ich die tatsächliche relative Position des Elements im Dokument ermitteln, auch wenn es gescrollt wurde.
quelle
getBoundingClientRect().top
ist nicht in meinem IE11, es gibt 0 zurück. Haben Sie eine Lösung.window.scrollY || window.pageYOffset
kann die Unterstützung verbessernBearbeiten: Fügen Sie Code hinzu, um das Scrollen der Seite zu berücksichtigen.
Das Argument id ist die ID des Elements, dessen Versatz Sie möchten. Adaptiert von einem Quirksmode-Beitrag .
quelle
quelle
Du kannst es versuchen:
node.offsetTop - window.scrollY
Es funktioniert unter Opera mit definiertem Viewport-Meta-Tag.
quelle
offsetTop
bezieht sie sich auf das am nächsten positionierte Element. Was je nach Seitenstruktur ein Stammelement sein kann oder nicht.jQuery setzt dies recht elegant um. Wenn Sie sich die Quelle für jQuery's ansehen
offset
, werden Sie feststellen, dass dies im Grunde so implementiert ist:quelle
Die Funktion auf dieser Seite gibt ein Rechteck mit den Koordinaten oben, links, Höhe und Breite eines übergebenen Elements relativ zum Browser-Ansichtsport zurück.
quelle
Quelle
quelle
Danke für alle Antworten. Es scheint, dass Prototype bereits eine Funktion hat, die dies ausführt (die Funktion page ()). Beim Anzeigen des Quellcodes der Funktion stellte ich fest, dass zuerst die Elementversatzposition relativ zur Seite (dh zur Dokumentoberseite) berechnet und dann das scrollTop davon subtrahiert wird. Weitere Informationen finden Sie im Quellcode des Prototyps.
quelle
Ich gehe davon aus, dass ein Element mit der ID von
btn1
auf der Webseite vorhanden ist und dass jQuery enthalten ist. Dies hat in allen modernen Browsern von Chrome, FireFox, IE> = 9 und Edge funktioniert. jQuery wird nur verwendet, um die Position relativ zum Dokument zu bestimmen.quelle
Manchmal
getBoundingClientRect()
zeigt der Eigenschaftswert des Objekts 0 für IE. In diesem Fall müssen Siedisplay = 'block'
für das Element festlegen . Sie können den folgenden Code für alle Browser verwenden, um den Offset zu erhalten.Erweitern Sie die jQuery-Funktionalität:
Verwenden :
quelle