У меня есть компонент, который я хочу динамически редактировать. Когда я вхожу в компонент, я хочу, чтобы он плавно увеличивался, а когда я ухожу, я хочу, чтобы он плавно сокращался.
Это мой код:
const easing = 0.1;
const outScale = 0.6;
const inScale = 1;
let targetScale = outScale;
let elementScale = targetScale;
let innerScale = 1 / elementScale;
const [parentTransformStyle, setParentTransformStyle] = useState(
`scale(${elementScale})`
);
const [innerTransformStyle, setInnerTransformStyle] = useState(
`scale(${innerScale})`
);
const requestRef = useRef();
const onPointOverEvent = () => {
targetScale = inScale;
console.log("over", inScale, targetScale);
};
const onPointerOutEvent = () => {
targetScale = outScale;
console.log("out", outScale, targetScale);
};
const animate = () => {
console.log("animate", targetScale);
elementScale += (targetScale - elementScale) * easing;
innerScale = 1 / elementScale;
setParentTransformStyle(`scale(${elementScale})`);
setInnerTransformStyle(`scale(${innerScale})`);
requestAnimationFrame(animate);
};
useEffect(() => {
requestRef.current = requestAnimationFrame(animate);
return () => cancelAnimationFrame(requestRef.current);
}, []);
Предполагается, что переменная targetScale
обновляться, когда мышь находится в элементе и когда мышь покидает элемент.
Если я распечатаю значение в обработчиках событий, значение будет правильным. Однако внутри функции animate
она имеет начальное значение. Может кто-нибудь указать мне на то, что мне не хватает?