26 lines
542 B
TypeScript
26 lines
542 B
TypeScript
import { useEffect, useState } from 'react';
|
|
|
|
export const useCountUp = (end: number, duration: number = 1200) => {
|
|
const [count, setCount] = useState(0);
|
|
|
|
useEffect(() => {
|
|
let start = 0;
|
|
const increment = end / (duration / 16);
|
|
const timer = setInterval(() => {
|
|
start += increment;
|
|
if (start >= end) {
|
|
setCount(end);
|
|
clearInterval(timer);
|
|
} else {
|
|
setCount(Math.floor(start));
|
|
}
|
|
}, 16);
|
|
|
|
return () => clearInterval(timer);
|
|
}, [end, duration]);
|
|
|
|
return count;
|
|
};
|
|
|
|
|