Number Counter
roll x digitAnimated number counter with rolling digit effect. From Animata.
textcounternumberanimata
0
Code
text-counter.tsx
"use client";
import { useEffect, useRef, useState } from "react";
export function NumberCounter({ to, duration = 2000 }: { to: number; duration?: number }) {
const ref = useRef<HTMLSpanElement>(null);
const [v, setV] = useState(0);
useEffect(() => {
const el = ref.current;
if (!el) return;
const io = new IntersectionObserver(([e]) => {
if (!e.isIntersecting) return;
io.disconnect();
const start = performance.now();
const tick = (t: number) => {
const p = Math.min(1, (t - start) / duration);
setV(to * (1 - Math.pow(1 - p, 3)));
if (p < 1) requestAnimationFrame(tick); else setV(to);
};
requestAnimationFrame(tick);
}, { threshold: 0.5 });
io.observe(el);
return () => io.disconnect();
}, [to, duration]);
return <span ref={ref} className="font-mono text-4xl font-bold tabular-nums">{Math.floor(v).toLocaleString()}</span>;
}Use it in another build
Paste the code into a component file, keep your project tokens (background, brand, radius) and it themes itself. Or tell Claude Code: “add the Number Counter component and wire it to my accent.”


