,Chain react-spring 悬停动画
,Chain react-spring animations on hover
我正在尝试在 react-spring
上制作一个简单的多步动画:旋转一个图标,该图标会转到 10deg
,然后转到 -10deg
,然后返回到 [=16] =].此动画将在用户悬停图标时执行。
以下代码片段展示了一个只有第一步的动画:
const [isBooped, setBooped] = useState(false);
const style = useSpring({
rotate: isBooped ? 10 : 0,
config: config.wobbly,
});
const onMouseEnter = useCallback(() => setBooped(true), []);
useEffect(() => {
if (!isBooped) {
return;
}
const timeoutId = window.setTimeout(() => {
setBooped(false);
}, 250);
return () => {
window.clearTimeout(timeoutId);
};
}, [isBooped]);
return (
<Button onMouseEnter={onMouseEnter}>
<Icon style={style} />
</Button>
);
我知道 to
接受一个数组来链接多个动画,如下所示:
to: [{ rotate: 10 }, { rotate: -10 }, { rotate: 0 }],
...但我不知道如何处理 isBooped
状态。
这是一个带有代码的沙箱:
https://codesandbox.io/s/react-spring-test-o8fwm?file=/src/Notifications.js
这是使用 imperative API react-spring 提供的好机会。
如果你希望它在有人没有悬停在图标上时停止动画,你也可以取消动画中流,或者它应该自己重置回 0
缩短动画(这是在下面提供的示例中注释掉了)。
通过将函数传递给 useSpring
挂钩,您将获得一个数组,其中第一项是您的样式,第二项是 API。然后您可以使用效果来触发异步动画开始 运行。这是您修改后的 codesandbox 以证明这一点:https://codesandbox.io/s/react-spring-test-forked-ildtb?file=/src/Notifications.js
我正在尝试在 react-spring
上制作一个简单的多步动画:旋转一个图标,该图标会转到 10deg
,然后转到 -10deg
,然后返回到 [=16] =].此动画将在用户悬停图标时执行。
以下代码片段展示了一个只有第一步的动画:
const [isBooped, setBooped] = useState(false);
const style = useSpring({
rotate: isBooped ? 10 : 0,
config: config.wobbly,
});
const onMouseEnter = useCallback(() => setBooped(true), []);
useEffect(() => {
if (!isBooped) {
return;
}
const timeoutId = window.setTimeout(() => {
setBooped(false);
}, 250);
return () => {
window.clearTimeout(timeoutId);
};
}, [isBooped]);
return (
<Button onMouseEnter={onMouseEnter}>
<Icon style={style} />
</Button>
);
我知道 to
接受一个数组来链接多个动画,如下所示:
to: [{ rotate: 10 }, { rotate: -10 }, { rotate: 0 }],
...但我不知道如何处理 isBooped
状态。
这是一个带有代码的沙箱: https://codesandbox.io/s/react-spring-test-o8fwm?file=/src/Notifications.js
这是使用 imperative API react-spring 提供的好机会。
如果你希望它在有人没有悬停在图标上时停止动画,你也可以取消动画中流,或者它应该自己重置回 0
缩短动画(这是在下面提供的示例中注释掉了)。
通过将函数传递给 useSpring
挂钩,您将获得一个数组,其中第一项是您的样式,第二项是 API。然后您可以使用效果来触发异步动画开始 运行。这是您修改后的 codesandbox 以证明这一点:https://codesandbox.io/s/react-spring-test-forked-ildtb?file=/src/Notifications.js