useSpriteAnimation()은 Facebook이 React Hooks를 사용하는 방식과 같습니다.
이미지는 다음과 같이 보일 수 있습니다.
애니메이션을 만들기 위해 사용자 지정 React Hook
useBackgroundShift()
을 작성할 수 있습니다.function useBackgroundShift(size, xacross, yacross, xymax) {
const [shift, setShift] = useState({ dx: 0, dy: 0 });
useEffect(() => {
let intervalID;
if (size.width !== null && size.height !== null) {
intervalID = setInterval(() => {
setShift(({ dx, dy }) => {
if (dx + dy * yacross + 1 >= xymax) {
dx = 0;
dy = 0;
} else if (++dx >= xacross) {
dx = 0;
if (++dy >= yacross) {
dy = 0;
}
}
return { dx, dy };
});
}, 132);
}
return () => intervalID && clearInterval(intervalID);
}, [size.width, size.height, xacross, yacross, xymax]);
if (size.width === null || size.height === null) return {};
return {
backgroundPosition: `-${(shift.dx * size.width) / xacross}px -${
(shift.dy * size.height) / yacross
}px`,
backgroundRepeat: "no-repeat"
};
}
또한 작동 방식을 확인하기 위해 프레임 1에서 프레임 N으로 애니메이션하는 기능을 추가했습니다. 실험용으로만 해본거라 아직 완벽하지는 않습니다. 일부는 현재 하드 코딩된 숫자일 수 있지만 이것이 스프라이트 애니메이션을 수행하기 위한 사용자 지정 React Hooks의 기본 아이디어입니다.
데모: https://codesandbox.io/s/beautiful-leaf-o9hew?file=/src/App.js
Reference
이 문제에 관하여(useSpriteAnimation()은 Facebook이 React Hooks를 사용하는 방식과 같습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/kennethlum/usespriteanimation-like-how-facebook-does-it-using-react-hooks-40d4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)