Web APIs Lanjutan — JavaScript

Coba bayangin kamu jago DOM saja — bisa baca-tulis HTML, tapi gak bisa: ngenotif user, deteksi posisi geo, akses kamera, deteksi kalo elemen masuk viewport…

Selain DOM, browser menyediakan banyak alat siap pakai buat JavaScript: memantau elemen yang masuk layar, menyalin teks ke clipboard, membaca lokasi pengguna, dan masih banyak lagi. Alat-alat bawaan browser ini disebut Web API. Gak perlu install apa pun, tinggal panggil.

🧪 Tebakan cepat: kamu mau tahu kapan sebuah kartu kelihatan di layar. Perlukah mengecek posisi scroll tiap beberapa milidetik pakai setInterval? Tebak dulu, jawabannya ada di bagian "IntersectionObserver: tahu kapan elemen kelihatan".

IntersectionObserver: tahu kapan elemen kelihatan

Gambar yang baru dimuat waktu discroll, atau kartu yang muncul pelan-pelan, butuh tahu kapan sebuah elemen masuk layar. IntersectionObserver adalah pengamat (observer) yang mengabarimu begitu itu terjadi:

const observer = new IntersectionObserver((entries) => {
  entries.forEach((entry) => {
    if (entry.isIntersecting) {
      entry.target.classList.add('muncul')
    }
  })
})

document.querySelectorAll('.foto').forEach((foto) => {
  observer.observe(foto)
})

Hasilnya, foto yang sudah ada di layar langsung dapat class muncul, sedangkan foto yang jauh di bawah baru dapat waktu kamu scroll ke sana. Jawaban tebakan: gak perlu setInterval, browser yang mengabari. Kalau sudah gak dibutuhkan, observer.disconnect() menghentikan semua pengamatannya.

Observer lain: ukuran dan isi DOM

Polanya sama: bikin pengamat dengan callback, lalu observe elemennya.

const ro = new ResizeObserver((entries) => {
  console.log('Lebar:', entries[0].contentRect.width)
})
ro.observe(document.querySelector('#kotak'))

const mo = new MutationObserver((records) => {
  console.log('Daftar berubah:', records.length, 'perubahan')
})
mo.observe(document.querySelector('#daftar'), { childList: true })

Clipboard: menyalin teks

navigator.clipboard.writeText('Halo!')
  .then(() => console.log('Tersalin'))

Geolocation: lokasi pengguna

navigator.geolocation.getCurrentPosition(
  (pos) => console.log(pos.coords.latitude, pos.coords.longitude),
  (err) => console.log('Gagal:', err.message)
)

Browser minta izin ke pengguna dulu. Callback pertama jalan kalau diizinkan, dan membawa koordinatnya. Callback kedua jalan kalau ditolak atau gagal.

⚠️ Jebakan yang sering ketemu

TL;DR: Web API adalah alat bawaan browser. new IntersectionObserver(callback) plus observer.observe(el) mengabari kapan elemen masuk layar: cek entry.isIntersecting, lalu pakai entry.target. ResizeObserver memantau ukuran, MutationObserver memantau isi DOM, dan disconnect() menghentikan pengamat. navigator.clipboard.writeText(teks) menyalin teks, navigator.geolocation.getCurrentPosition(...) membaca lokasi setelah pengguna mengizinkan.

Yang akan kamu pelajari