Motion.js关键帧动画配置spring过渡后跳过中间帧问题求助
问题:Framer Motion中Spring过渡导致关键帧动画跳过中间阶段
初始代码
<motion.div className="flex gap-x-4" animate={{y: [100, 30, 0], x: [30, 30, 0], scale: [1.4, 1.4, 1.0]}} transition={{ duration: 2 , delay: 3.0}} style={{ transformOrigin: "center center" }}> <Image src="/control-ani.svg" alt="controller" width={18} height={26} className="" /> <h1>different use cases</h1> </motion.div>
问题描述
通过关键帧实现三段式动画(Y轴依次经过100→30→0,X轴和Scale保持对应分段值),但配置以下Spring过渡后,动画会直接跳过中间阶段,平滑过渡到最终值,而非预期的分段动画:
transition={{ type: "spring", stiffness: 100, damping: 10 }}
解决方案
原因是Spring过渡默认会对整个关键帧序列做连续弹簧插值,而非按关键帧分段执行。要实现分段的Spring动画,有两种可行方式:
方式一:用过渡数组匹配关键帧阶段
给transition传入数组,数组长度为关键帧数减1(n个关键帧对应n-1个过渡阶段),每个阶段单独配置Spring参数:
<motion.div className="flex gap-x-4" animate={{ y: [100, 30, 0], x: [30, 30, 0], scale: [1.4, 1.4, 1.0] }} transition={[ { type: "spring", stiffness: 100, damping: 10 }, // 第一阶段:各属性从第一个值到第二个值 { type: "spring", stiffness: 100, damping: 10 } // 第二阶段:各属性从第二个值到第三个值 ]} style={{ transformOrigin: "center center" }} > <Image src="/control-ani.svg" alt="controller" width={18} height={26} className="" /> <h1>different use cases</h1> </motion.div>
这种方式可以精准控制每个阶段的过渡参数,比如给不同阶段设置不同的stiffness值。
方式二:启用keyframes强制分段过渡
在transition中添加keyframes: true,强制按关键帧分段应用Spring效果:
transition={{ type: "spring", stiffness: 100, damping: 10, keyframes: true }}
该选项会让Framer Motion对每个关键帧区间单独应用Spring过渡,而非合并整个序列。
内容的提问来源于stack exchange,提问作者Michael May
相关产品推荐
相关产品推荐

