javascript - 映射网格但在css动画reactjs中具有每个节点延迟
问题描述
我在处理一些 css 动画时遇到了问题,我知道它为什么不起作用,但我不确定如何克服它。这是在 ReactJs 中完成的。
我渲染一个网格,比如说 5、5。
然后我继续使用如下函数显示网格:
DisplayNodes = () => {
const {grid} = this.state; // get the node array from state
return (
<div id="grid">
{grid.map((rowMap, rIndex) => {
return (
<div class="row">
{rowMap.map((node,nIndex) => {
return (
<Node/>
);
})}
</div>
)
})}
</div>
)
}
这将生成一个 5 x 5 的网格。
在Node
对象中,我有一个 className node
。一些节点是唯一的,并且具有不同的类名和不同的样式。
.node {
width:20px;
height:20px;
border:1px solid gray;
cursor: pointer;
user-select: none;
background-color: black;
transition: background-color 500ms linear;
}
我想要的效果是每个节点都会在 500 毫秒内变成黑色的背景色,一次一个。给它一个很好的图案效果淡入淡出。我得到的结果是它们都在 500 毫秒内同时变黑。
我相信这是因为在映射期间它是预先计算的,然后一次完成。不完全确定如何延迟。
我尝试setTimeout
在地图中添加一个函数,但随后在尝试延迟其他节点时,它们最终被绘制在网格的错误位置。
解决方案
我想你可以用另一种方式做到这一点。
您可以从一开始就计算延迟时间,而不是一一延迟。
例如,我假设您希望每个需要 500 毫秒才能变成另一种颜色,然后下一个节点开始转动并使用另一个 500 毫秒,那么对于第一个节点它应该延迟 0 毫秒时间,但对于第二个节点它应该延迟 500*1 毫秒时间,第三个应该是 500*2 毫秒,等等。
因此,映射代码应该将节点的索引传递给节点本身:
DisplayNodes = () => {
const {grid} = this.state; // get the node array from state
return (
<div id="grid">
{grid.map((rowMap, rIndex) => {
return (
<div class="row">
{rowMap.map((node,nIndex) => {
return (
<Node index={nIndex}/>
);
})}
</div>
)
})}
</div>
)
}
在节点渲染函数中,您应该为其设置适当的过渡延迟 CSS。
Node =(index)=>{
const delay = index*500 + "ms";
return <div style={{transitionDelay:delay }}>...<div>;
}
然后他们应该一个一个看起来有动画。
推荐阅读
- amazon-web-services - 如何通过像s3这样的烧瓶将文件保存到ec2实例?
- java - 如何在 Java 中将属性映射到 Integer Mapstruct
- pytorch - 在 PyTorch 中计算标量和向量之间的梯度
- php - 尝试获取上传图像的名称
- laravel - 无法编译资产(Laravel Mix)
- facebook - 如何使用 Facebook API 获得视频观看次数
- java - 当我们在 Java 中的另一个类中创建一个类的对象时会发生什么?
- python - 执行某些操作并调用删除它的内置函数的函数
- ruby - 如何在一步中为 ActiveRecord::Relation 数组分配多个属性?
- r - 是什么导致此片段中“较长的对象长度不是较短对象长度的倍数”?