GetBoundingClientRect, aber relativ zum gesamten Dokument

Lesezeit: 2 Minuten

Benutzeravatar von John
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 jQuerys height() Noch width() funktionieren (ich habe es sogar versucht window.load()), aber offset() ist. Weder sind Javascripts .offset

return [$e.offset().top + $e.height()/2, $e.offset().left + $e.width()/2]

$e.height() und $e.width() beide kehren zurück 0

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)

Quelle.

  • “Für browserübergreifende Kompatibilität verwenden Sie window.pageYOffset Anstatt von window.scrollYMDN

    – 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.pageYOffset ist 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


Benutzeravatar von Lucidity
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


1404880cookie-checkGetBoundingClientRect, aber relativ zum gesamten Dokument

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy