Animations/Scroll Reveal

Scroll Reveal

Chaque element apparait avec un fade + slide au scroll. Wrapper utilitaire reutilisable.

scrollJSrevealfadeutility
Trigger: Scroll (IntersectionObserver)
CSS requis: Non
Difficulte: easy

Preview live

Code

"use client";
import { useRef, useState, useEffect } from "react";

function ScrollReveal({ children, delay = 0 }: { children: React.ReactNode; delay?: number }) {
  const ref = useRef<HTMLDivElement>(null);
  const [visible, setVisible] = useState(false);

  useEffect(() => {
    const observer = new IntersectionObserver(
      ([entry]) => { if (entry.isIntersecting) { setVisible(true); observer.disconnect(); } },
      { threshold: 0.2 }
    );
    if (ref.current) observer.observe(ref.current);
    return () => observer.disconnect();
  }, []);

  return (
    <div ref={ref} style={{
      opacity: visible ? 1 : 0,
      transform: visible ? "translateY(0)" : "translateY(20px)",
      transition: `opacity 0.6s ease ${delay}ms, transform 0.6s ease ${delay}ms`,
    }}>
      {children}
    </div>
  );
}

// Usage: wrap chaque element
<ScrollReveal delay={0}><Card /></ScrollReveal>
<ScrollReveal delay={100}><Card /></ScrollReveal>
<ScrollReveal delay={200}><Card /></ScrollReveal>

Instructions

Wrapper utilitaire reutilisable. Wrappez chaque element avec un delay stagger (0, 100, 200ms...) pour un reveal en cascade. Ajustez le threshold (0.2), la duree (0.6s) et le translateY (20px).