JavaScript

Intersection Observer (Lazy Load / Reveal)

by @admin
10h ago
Apr 28, 2026
Public
Uses the IntersectionObserver API to trigger a callback when elements enter the viewport. The reveal pattern adds a visible class to animate elements as they scroll into view. The lazyLoad pattern loads images on demand by swapping data-src to src. Much more performant than scroll event listeners.
JavaScript
// Scroll-reveal animation
function revealOnScroll(selector, visibleClass = 'visible') {
  const observer = new IntersectionObserver(
    (entries) => entries.forEach((e) => { if (e.isIntersecting) { e.target.classList.add(visibleClass); observer.unobserve(e.target); } }),
    { threshold: 0.15 }
  );
  document.querySelectorAll(selector).forEach((el) => observer.observe(el));
}

// Lazy-load images
function lazyLoadImages(selector = 'img[data-src]') {
  const observer = new IntersectionObserver((entries) => {
    entries.forEach((e) => {
      if (e.isIntersecting) {
        e.target.src = e.target.dataset.src;
        observer.unobserve(e.target);
      }
    });
  });
  document.querySelectorAll(selector).forEach((img) => observer.observe(img));
}

// Usage
revealOnScroll('.fade-in');
lazyLoadImages();
Tags

Save your own code snippets

Create a free account and build your private vault. Share publicly whenever you want.