htmlcssjavascriptscrollanimasiMenengah10 mnt baca

Animasi Scroll Reveal

Elemen muncul dengan animasi saat di-scroll ke area terlihat, seperti di landing page modern.

Efek yang Kamu Kagumi Itu

Pernah buka landing page keren di mana teks meluncur masuk dari bawah saat kamu scroll? Itu "scroll reveal". Dulu butuh library, sekarang cukup dengan IntersectionObserver bawaan browser.

Langkah Membangun

HTML: Beberapa <section class="reveal"> berisi kartu-kartu. Tambahkan varian arah: reveal-kiri, reveal-kanan.

CSS: Elemen reveal awalnya opacity: 0; transform: translateY(40px) dengan transisi 0.6 detik. Saat punya class terlihat, kembali ke opacity: 1; transform: none.

JS: IntersectionObserver adalah "penjaga" yang memberi tahu saat elemen masuk/keluar viewport:

js
const pengamat = new IntersectionObserver((masuk) => {
  masuk.forEach((item) => {
    if (item.isIntersecting) {
      item.target.classList.add("terlihat");
      pengamat.unobserve(item.target); // animasikan sekali saja
    }
  });
});
document.querySelectorAll(".reveal").forEach((el) => pengamat.observe(el));

Kenapa Bukan Event Scroll?

Menghitung posisi tiap elemen di setiap event scroll itu berat. IntersectionObserver dioptimasi browser di level native, jauh lebih hemat baterai dan tidak patah-patah.

Kesalahan Umum

  • Lupa unobserve sehingga animasi terpicu ulang setiap scroll naik-turun.
  • Threshold tidak diatur sehingga elemen besar terpicu terlalu cepat (pakai threshold: 0.2 = 20 persen terlihat).
  • Konten penting disembunyikan dari pengguna tanpa JS (pastikan konten tetap terbaca jika JS mati: tambahkan class reveal lewat JS, bukan di HTML).
Live Playground
export default function App(): JSX.Element {
  return <h1>Hello world</h1>
}

Edit kode di kiri, preview kanan ter-update otomatis.

Tantangan

Tantangan: Delay Bertingkat

Buat 3 kartu dalam satu section muncul berurutan (kartu 2 menyusul 0.15 detik setelah kartu 1, kartu 3 menyusul 0.3 detik) memakai atribut data-delay dan transition-delay.