Framer Motion文字揭露动画无法运行,请求排查代码问题
问题分析与修复
你的文字 stagger 动画失效的核心原因是子元素的 motion.span 未指定 initial 和 animate 属性——Framer Motion 需要明确绑定变体状态才能触发动画,父元素的时序控制(delayChildren、staggerChildren)已配置,但子元素没有对应的状态触发逻辑。
修复后的代码
import { motion } from "framer-motion"; const banner = { animate: { transition: { delayChildren: 0.4, staggerChildren: 0.1, }, }, }; const letterAni = { initial: { y: 400 }, animate: { y: 0, transition: { ease: [0.6, 0.01, -0.05, 0.95], duration: 1, }, }, }; const AnimatedLetters = ({ title }) => ( <motion.span className="row-title" variants={banner} initial="initial" animate="animate" > {[...title].map((letter, i) => ( // 为子元素添加 initial 和 animate 属性,绑定变体状态 <motion.span className="row-letter" variants={letterAni} initial="initial" animate="animate" key={i} > {letter} </motion.span> ))} </motion.span> ); export default function TestFramer() { return ( <div className="text-9xl"> <AnimatedLetters title="title" /> </div> ); }
额外优化提示
- 父元素本身无动画需求时,可移除
initial="initial"(banner变体未定义initial状态,默认无动画),仅保留animate="animate"即可触发子元素时序控制。 - 确保
.row-letter为行内块级元素(添加 CSSdisplay: inline-block),否则行内元素的y轴位移可能表现异常。
内容的提问来源于stack exchange,提问作者ryotamiyagi
相关产品推荐
相关产品推荐

