CodeBlanks Logo Icon CodeBlanks

ResizeObserver

JavaScript kursu · İleri seviye · Ders 92/100

Bir öğenin boyut değişikliklerini gözlemlemeyi öğrenirsin.

ResizeObserver

ResizeObserver bir öğenin boyutlarının ne zaman değiştiğini bildirir. Eskiden window.addEventListener('resize', ...) kullanılırdı; ama bu yalnızca pencere boyutu değişince çalışır, bir öğenin kendisi küçüldüğünde değil. ResizeObserver her öğeyi ayrı ayrı izler.

new ResizeObserver(callback) ile oluşturursun. Callback bir entries dizisi alır; her kayıtta contentRect veya borderBoxSize bulunur. Bir öğeyi observe ile eklersin.

contentRect ve borderBoxSize

Callback her öğe için bir ResizeObserverEntry alır. İçindeki iki temel alan:

  • contentRect: içerik kutusunun konumu ve boyutu; width ve height en çok kullanılanları
  • borderBoxSize: kenarlık dahil boyut; yeni tarayıcılarda dizi gelir

Eski tarayıcılarda yalnız contentRect bulunur. Yeni kodlarda ikisini birlikte kullanmak iyi bir alışkanlıktır.

disconnect ile temizlik

İşin bitince observer.disconnect() çağrısı izlemeyi durdurur ve belleği serbest bırakır. Bunu yapmazsan, öğe silinse bile gözlemci ona referans tutabilir; bu da çöp toplayıcının çalışmasını engeller.

Özellikle tek sayfa uygulamalarında bileşen kalktığında disconnect çağırmak önemli bir alışkanlıktır. Aynı observer'ı birden çok öğe için kullanabilirsin; hepsini tek çağrıyla durdurursun.

Uygulama box öğesinin genişliğini izle

Bir ResizeObserver oluştur. Callback entries dizisini alır; her entry için entry.contentRect.width değerini konsola yaz. Son olarak observer.observe(box) ile izlemeye başla.

Örnek çözümü göster
1. new ResizeObserver((entries) => {...}) ile oluştur.
2. Her entry için entry.contentRect.width değerini konsola yaz.
3. observer.observe(box) ile izlemeye başla.

Örnek çözüm:
const observer = new ResizeObserver((entries) => {
  for (const entry of entries) {
    console.log(entry.contentRect.width);
  }
});
observer.observe(box);

Kendini test et

  1. ResizeObserver, window resize olayına göre ne avantaj sağlar?

    • Daha az kod yazmayı sağlar
    • Tek tek öğelerin boyut değişimini yakalar
    • Yalnızca pencereyi izler
    • Hiçbir zaman tetiklenmez
    Cevabı göster

    Tek tek öğelerin boyut değişimini yakalar — Doğru. ResizeObserver her öğeyi ayrı izler; pencere değil öğe küçülünce de çalışır.

  2. Genişliği oku

    for (const entry of entries) {
      const w = entry.contentRect.____;
    }
    Cevabı göster
    for (const entry of entries) {
      const w = entry.contentRect.width;
    }
  3. ResizeObserver terimlerini eşleştir

    contentRect
    İçerik kutusu boyutu
    borderBoxSize
    Kenarlık dahil boyut
    observe
    İzlemeye başla
    disconnect
    İzlemeyi durdur

İleri seviye bölümündeki tüm dersler