reactjs - 当每个项目在视图中滚动时为映射项目设置一次动画
问题描述
我在使用array.map 为3 div 设置动画时遇到了一些问题。我想让每个 div 使用成帧器运动在视图中动画一次。
我遇到的问题是,当尝试使用 inView 单独为 div 设置动画时,成帧器运动会同时为所有 3 个设置动画。
如果我inView
ref={ref}
在父 Div 上设置,一旦第一个可见,所有 3 个将一起动画。
或者
如果我设置ref={ref}
到 3 个映射的 div,所有 3 个将仅在第 3 个和最后一个 div 出现时动画。
我试图找到一种简洁的方法来单独动画到具有映射数据的视图 Div 中。
代码框链接供参考。
解决方案
如果您希望它们单独运行,则需要为每个 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>
);
};
推荐阅读
- java - Java:实现动态消费Jars的等效方法是什么
- python - 修改和操作目录和子目录中的多个 csv 文件
- json - 对“DecodedArray”类型的无效关联类型“Iterator”的引用
' - keras - ValueError:未知优化器:来自 Keras 的 load_model 的 RAdam
- python - 在 django rest 中使用 .values() 时序列化程序中的键错误
- performance - 在没有附件的调试模式下运行 Tomcat 会影响性能吗?
- node.js - 为什么我在查看 http://my.server.ip:3000 时看不到 Express 在端口 3000 上运行?
- node.js - 我的 lambda 函数无法正常工作
- reactjs - 如何在本机反应中保存和获取数据到本地存储?
- ios - SwiftUI 中的 NumberFormatter - 使用未解析的标识符“格式化程序”