0

voyageurs heureux

React + MotionTexte et défilement

Compteur animé

Un nombre qui compte de zéro jusqu’à votre chiffre dès qu’il apparaît à l’écran au défilement.

Réglages

2400
1200ms

Code

import { useEffect, useRef, useState } from "react";
import { useInView } from "framer-motion";

interface InViewCounterProps {
  end?: number;
  /** Milisegundos que tarda en llegar a la cifra final. */
  duration?: number;
  label?: string;
}

export default function InViewCounter({
  end = 2400,
  duration = 1200,
  label = "voyageurs heureux",
}: InViewCounterProps) {
  const ref = useRef<HTMLDivElement>(null);
  // useInView mira el viewport y respeta el recorte de los contenedores con scroll: funciona en ambos casos.
  const seen = useInView(ref, { once: false });
  const [n, setN] = useState(0);

  useEffect(() => {
    if (!seen) {
      setN(0);
      return;
    }
    const start = performance.now();
    let raf = 0;
    const run = (t: number) => {
      const p = Math.min(1, (t - start) / duration);
      setN(Math.round(end * p));
      if (p < 1) raf = requestAnimationFrame(run);
    };
    raf = requestAnimationFrame(run);
    return () => cancelAnimationFrame(raf);
  }, [seen, duration, end]);

  return (
    <div ref={ref} className="text-center text-[#1d1d1f] dark:text-[#f5f5f7]">
      <strong className="text-5xl font-semibold tabular-nums">{n.toLocaleString("es-ES")}</strong>
      <p className="text-sm text-[#86868b]">{label}</p>
    </div>
  );
}

Prompt pour l’IA

Collez-le dans ChatGPT, Claude ou Cursor : le bloc sera adapté à votre projet avec ces réglages, même sans React.

Plus dans Texte et défilement

Où l’utiliser

Les chiffres qui défilent se lisent, les chiffres figés se survolent. Utilisez-le dans la partie preuves d’une landing page : « 2 400 voyageurs heureux », projets livrés par un studio, repas servis par une association ou téléchargements d’une application. Ce compteur animé en React démarre quand le bloc devient visible, pas au chargement de la page.

N’affichez que des chiffres que vous pouvez justifier, l’animation attire encore plus l’attention dessus. Gardez une durée d’environ une seconde ; plus longue, on fait défiler avant la fin. Il recompte à chaque retour à l’écran.