You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 16:42:38