GetBoundingClientRect, aber relativ zum gesamten Dokument
Lesezeit: 2 Minuten
John
Gibt es eine Methode, um die Klient rect für ein Element relativ zum Dokument außer offset? getBoundingClientRect() erhält den Wert relativ zum Browser des Clients.
Ich benutze D3 und jQuerysheight() Noch width() funktionieren (ich habe es sogar versucht window.load()), aber offset() ist. Weder sind Javascripts .offset
Es ist ein SVG Element, ich benutze es nur, um meine zu bearbeiten SVG. Es ist viel einfacher, SVGs damit zu laden/zu handhaben D3. Das Projekt ist nicht datenbezogen, es ist nur eine Karte.
Sie haben $e.height().height/2, es sollte $e.height()/2 sein
– Abraham Uribe
5. Juni 2013 um 20:59 Uhr
Ist das ein SVG-Element oder ein HTML-Element? Was machst du mit D3?
– nrabinowitz
5. Juni 2013 um 21:51 Uhr
Dein Beitrag ist unklar. Was funktioniert und was funktioniert nicht? Sind die Elemente sichtbar (Sie können .offset() nicht für versteckte Elemente verwenden)?
– ruhige Minze
30. September 2013 um 17:13 Uhr
Verwenden element.getBoundingClientRect() von selbst zurück top und left Werte, die relativ zum Darstellungsbereich sind, wie Sie entdeckt haben. Wenn Sie möchten, dass sie relativ zum Dokument sind (und nicht von der Bildlaufposition beeinflusst werden), können Sie die Bildlaufposition mit hinzufügen window.scrollY und window.scrollXso:
const rect = element.getBoundingClientRect()
rect.left // (relative to viewport)
rect.top // (relative to viewport)
rect.left + window.scrollX // (relative to document)
rect.top + window.scrollY // (relative to document)
“Für browserübergreifende Kompatibilität verwenden Sie window.pageYOffset Anstatt von window.scrollY“ – MDN
– vsync
22. November 2019 um 14:48 Uhr
Ich stimme dem Kommentar von @vsync oben zu, aber es bedarf weiterer Erklärung. Beachten Sie, dass window.scrollY ist praktisch der Standard. Der Pseudonym, window.pageYOffsetist Cross-Browser-kompatibel, aber das liegt daran window.scrollY funktioniert in allen Browsern, aber es funktioniert nicht in IE (es funktioniert evtl IE11). Wenn Sie IE nicht mehr bedienen, können Sie ihn sicher verwenden window.scrollY.
– Rounin – Stehend mit der Ukraine
5. März 2021 um 9:23 Uhr
Klarheit
Hier ist eine ES6-Methode, die dieselben Eigenschaften zurückgibt wie getBoundingClientRect() aber relativ zum gesamten Dokument.
const getOffsetRect = (el) =>
let rect = el.getBoundingClientRect();
// add window scroll position to get the offset position
let left = rect.left + window.scrollX;
let top = rect.top + window.scrollY;
let right = rect.right + window.scrollX;
let bottom = rect.bottom + window.scrollY;
// polyfill missing 'x' and 'y' rect properties not returned
// from getBoundingClientRect() by older browsers
let x = rect.x === undefined ? left : rect.x + window.scrollX;
let y = rect.y === undefined ? top : rect.y + window.scrollY;
// width and height are the same
let width = rect.width;
let height = rect.height;
return { left, top, right, bottom, x, y, width, height };
};
Hinweis: Es ist auch Poly-Füllung x und y Props, die von älteren Browsern nicht von getBoundingClientRect() zurückgegeben werden
Schöne Methode! Vor allem die Füllwatte!
– Bruno Monteiro
4. März 2020 um 4:04 Uhr
14048800cookie-checkGetBoundingClientRect, aber relativ zum gesamten Dokumentyes
Sie haben $e.height().height/2, es sollte $e.height()/2 sein
– Abraham Uribe
5. Juni 2013 um 20:59 Uhr
Ist das ein SVG-Element oder ein HTML-Element? Was machst du mit D3?
– nrabinowitz
5. Juni 2013 um 21:51 Uhr
Dein Beitrag ist unklar. Was funktioniert und was funktioniert nicht? Sind die Elemente sichtbar (Sie können .offset() nicht für versteckte Elemente verwenden)?
– ruhige Minze
30. September 2013 um 17:13 Uhr