const circle = useRef(null);
const [percent, setPercent] = useState(0);
useLayoutEffect(() => {
gsap.to(circle.current, {
strokeDashoffset: 1445,
duration: 20,
ease: Linear.easeNone
});
}, []);
useEffect(() => {
if(percent < 99.9) {
setTimeout(() => setPercent(percent => percent + 0.1), 20);
} else {
setPercent(100);
}
}, [percent])
return (
<div className="loading">
<svg
className="loadingRing"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
>
<circle ref={circle} r="230" cx="250" cy="250" />
</svg>
<div className="loadingText">
<div>Loading</div>
<div>{percent === 100 ? percent : percent.toFixed(1)}%</div>
</div>
</div>
)
При смене значений в setInterval всё работает по разному. Если ставлю 20, то очень долго, хотя по 0,1% в 20 мс за 20 секунд должно дойти до 100 ровно, если ставлю 12 мс, то почти в притык. Подскажите что не так и как лучше синхронизировать?