幸运的是,有一种相当简单的方法可以在成帧器运动中运行多个动画并重复最后一个。
使用useAnimation() 挂钩,我们可以设置component animation controls,然后能够按顺序执行我们想要的任何动画。
首先确保创建一个AnimationControls 对象:
const animationControls = useAnimation();
然后我们将设置我们的<motion.div> 以使用我们创建的AnimationControls 对象:
<motion.div
style={{
width: 150,
height: 150,
borderRadius: 30,
backgroundColor: "#fff",
}}
animate={animationControls} // This will let us control the animation using the animationControls object
/>
接下来我们设置我们想要遵循的动画序列。请注意,在最后的.start 调用中,我们将transition 设置为具有repeat: Infinity 的属性,因此它将永远重复。
async function sequence() {
await animationControls.start({ rotate: -90 });
await animationControls.start({ scale: 1.5 });
await animationControls.start({ rotate: 0 });
await animationControls.start({ scale: 1 });
animationControls.start({
x: 100,
transition: {
ease: "easeInOut",
duration: 1,
repeat: Infinity,
repeatType: "reverse"
}
});
}
最后一步是在页面加载时调用sequence(),这将启动动画:
useEffect(() => {
sequence();
}, []);
这是一个codesandbox 来展示所有这些部分。