如果您希望它们单独运行,则需要为每个 div 存储单独的状态和控件。最简单的方法是制作单独的组件:
const ProjectDiv = ({ onClick, item }) => {
const controls = useAnimation();
const [ref, inView] = useInView();
useEffect(() => {
if (inView) {
controls.start('visible');
}
}, [controls, inView]);
return (
<motion.div
ref={ref}
className="project_card"
onClick={onClick}
animate={controls}
initial="hidden"
transition={{ duration: 1 }}
variants={{
visible: { opacity: 1, scale: 1 },
hidden: { opacity: 0, scale: 0 }
}}
>
<img src={item.image} alt="Project" />
<h2>{item.title}</h2>
<p>{item.description}</p>
</motion.div>
);
};
代码沙盒示例