css - 反应 onMount 动画
问题描述
我正在尝试使用 React(和 Tailwind,但没关系)创建一个 onMount 动画。我目前的实现是这样的:
const Component = () => {
const [mounted, setMounted] = useState(false)
useEffect(() => {
setTimeout(() => {
setMounted(true)
}, 250)
}, [])
return(
<nav
className={classNames(
'flex justify-between items-center transform-gpu transition-transform duration-500',
mounted ? 'translate-x-0' : '-translate-x-full')}> Some nav components </nav>
)
}
基本上,这段代码使状态更改超时,这表明组件何时安装,然后将 CSS 转换应用于元素。
我正在考虑优化当前的解决方案,但想知道是否还有其他方法可以制作 onMount 动画。我很感激任何建议。如果有必要,我可以创建一个沙盒示例。
解决方案
不确定这是否能准确回答您的问题,但我个人喜欢使用framer-motion来处理此类问题。例如,如果您想translateX
在组件安装后应用动画,您可以执行以下操作:
import { motion } from "framer-motion";
function Component() {
return (
<motion.nav
initial={{ translateX: 0 }}
animate={{ translateX: 100 }}
transition={{ ease: "easeOut", duration: 2 }}
>
Some components
</motion.nav>
);
}
请参阅此代码框。(单击代码和框浏览器中的刷新按钮以重新触发动画或使用挂载/卸载按钮)
因此,不仅仅是通过 framer-motion 道具<nav>
使用和指定动画。<motion.nav>
如果您还需要其他类,您仍然可以像以前一样使用其他类设置该元素的样式。
请注意,一种更短的表达方式是使用该x
属性,如下所示:
<motion.nav
animate={{ x: 100 }}
transition={{ ease: "easeOut", duration: 2 }}
>
Some components
</motion.nav>
您可以直接将动画作为属性来控制,也可以使用Animate Presence来控制组件卸载时的动画。
推荐阅读
- java - 为什么我的 StringBuffer 变量不同步。StringBuilder 变量在哪里表现为同步
- npm - NestJs - 在控制器中使用外部库导入的问题
- javascript - Javascript:如果两个输入有值,则隐藏 .div
- list - 问题:未能创建任务或类型原因:名称未定义
- react-native - 我如何缩小仅用于 webview 的 expo 应用程序包
- sonarqube - sonarqube:此软件需要 x86_64 架构
- html - R格式化设置行高
- algorithm - 任何代码块的运行时间复杂度
- python - Python 的 StaleElementException
- python - 使用 boto3 和 ftplib 将文件从 FTP 复制到 S3 存储桶失败,并出现“500 语法错误,命令无法识别”