getBoundingClientRect / elementFromPoint în JavaScript

Pagina web (DOM) Toate browserele

Returnează poziția și mărimea unui element pe ecran; elementFromPoint face invers, din coordonate în element.

Sintaxă
element.getBoundingClientRect()
element.getClientRects()
document.elementFromPoint(x, y)

Ce face getBoundingClientRect / elementFromPoint

getBoundingClientRect() returnează un dreptunghi cu x, y, width, height, top, right, bottom, left, în pixeli, față de colțul din stânga sus al ferestrei vizibile (nu al paginii). Pentru poziția în pagină adaugă window.scrollY.

getClientRects() returnează câte un dreptunghi pentru fiecare rând al unui element de text care se întinde pe mai multe rânduri. document.elementFromPoint(x, y) returnează elementul de deasupra aflat la acele coordonate.

Ce returnează

Un obiect DOMRect (sau o listă, la getClientRects); elementFromPoint returnează un element sau null.

Exemple

Exemplul 1: Poziția unui buton și verificarea vizibilității

Rezultatul pentru o pagină derulată cu 800 de pixeli.

const buton = document.querySelector("#cumpara");
const r = buton.getBoundingClientRect();

console.log(Math.round(r.top), Math.round(r.left), r.width, r.height);
console.log(r.top + window.scrollY);
const vizibil = r.top < window.innerHeight && r.bottom > 0;
console.log(vizibil);
console.log(document.elementFromPoint(r.left + 5, r.top + 5) === buton);

Rezultat în browser

412 32 160 44
1212
true
true

Exemplul 2: Un link pe două rânduri

const link = document.querySelector("p a");
console.log(link.getClientRects().length);

Rezultat în browser

2

Greșeli frecvente

  • Apelezi metoda într-o buclă de derulare pentru multe elemente. Fiecare apel forțează browserul să recalculeze aranjarea; pentru vizibilitate folosește IntersectionObserver.

Comenzi înrudite

  • Element.scrollIntoView: Derulează pagina (sau containerul) astfel încât elementul să devină vizibil.
  • IntersectionObserver: Anunță când un element intră sau iese din zona vizibilă: încărcare leneșă, animații la derulare, derulare infinită.
  • window.scrollTo / scrollBy: Derulează pagina (sau un element derulabil) la o poziție anume sau cu o anumită distanță.