2 回答
TA贡献1884条经验 获得超4个赞
这是一个有点棘手的问题。乍一看,您似乎无法使用单个 useSpring 函数实现它,因为不同的延迟。您可以尝试使用 useTrail,但轨迹不容易逆转。所以 useSprings 仍然存在。
delay 属性是关键。您必须将它与函数参数一起使用,这样您就可以根据按钮的索引和悬停状态更改延迟。我最终得到了这个,它创建了 4 个动画 div 更通用一些:
const count = 4;
const [springs, setSprings] = useSprings(count, (i) => ({
opacity: 0.2,
transform: `translateY(20px)`
}));
const onHover = (isHover) => {
setSprings((i) => ({
opacity: isHover ? 1 : 0.2,
transform: isHover ? `translateY(0px)` : `translateY(20px)`,
delay: isHover ? i * 100 : (count - 1 - i) * 100
}));
};
渲染部分:
{springs.map((props, index) => (
<animated.div key={index} style={props}>
button
</animated.div>
))}
TA贡献1810条经验 获得超4个赞
您可以使用该delay属性指定以毫秒为单位的时间长度,以通过以下方式延迟动画:
所以在你的情况下,延迟 80ms:
const fadeStyles = useSpring({
delay: 80,
from: { opacity: 0, transform: `translateY(20px)` },
to: {
opacity: isHovering ? 1 : 0,
transform: isHovering ? `translateY(0px)` : `translateY(20px)`,
},
});
添加回答
举报