【发布时间】:2021-10-30 14:48:20
【问题描述】:
给定一个列表:
li {
display: inline-block;
color: #000000;
}
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
</ul>
使用 react-spring,我试图每 3 秒(一个一个)为列表中每个项目的颜色设置动画,并从头到尾循环。
例如:
- 从 - 颜色开始为黑色
- Enter - 颜色变为红色
- 离开 - 颜色变回黑色
我可以让单个项目显示和颜色更新然后隐藏(因为列表中只有 1 个项目正在动画),但不能显示整个列表并逐个更改每个项目的颜色。
const ColourListTransition = (items, delay) => {
const [index, setIndex ] = useState(0);
useEffect(() => {
const interval = setInterval(() => {
setIndex((state) => ( state + 1 ) % items.length);
}, delay);
return () => clearInterval(interval);
}, []);
return useTransition(items[index], {
from: { color: '#000000' },
enter: { color: "#FF0000" },
leave: { color: "#000000" },
loop: true,
config: config.molasses
})
}
{ ColourListTransition(['item 1', 'item 2', 'item 3', 'item 4'], 3000)(({ color }, item) => (
<animated.li
key={ item }
style={ { color, display: 'inline-block', listStyleType: 'none' } }
>
{ item }
</animated.li>
)) }
【问题讨论】:
-
你现在看到了什么行为?
-
@DanielDuong 因为我们正在传递一组项目,它们都同时具有动画效果。需要弄清楚如何一次将动画应用于项目。
-
你能附上一个视频例子吗?
标签: reactjs react-spring