Skip to content

一页里对比 gsap.to、gsap.from、gsap.fromTo 以及常用 timing / transform 参数对视觉结果的影响

Tween Playground

竖向看三种 API,重点看差异,不挤在一屏里

上面调统一参数,下面按顺序看 gsap.to()gsap.from()gsap.fromTo()

参数区

改动后,下面三个组件都会自动重播。

声明终点

gsap.to()

当前样式先保持默认,然后补间到你设定的目标状态。

to
适合默认样式已经稳定的元素。当前基点:50% 50%
gsap.to(target, {
    x: 120,
    y: -24,
    scale: 1.15,
    rotation: 18,
    opacity: 0.35,
    borderRadius: 48,
    skewX: 0,
    skewY: 0,
    transformOrigin: '50% 50%',
    duration: 0.8,
    delay: 0,
    repeat: 0,
    repeatDelay: 0.2,
    yoyo: false,
    ease: 'power2.out'
})

声明起点

gsap.from()

设计稿默认样式就是终点时,这种写法最直接,看它“从哪里来”。

from
适合入场动画和 reveal。当前基点:50% 50%
gsap.from(target, {
    x: 120,
    y: -24,
    scale: 1.15,
    rotation: 18,
    opacity: 0.35,
    borderRadius: 48,
    skewX: 0,
    skewY: 0,
    transformOrigin: '50% 50%',
    duration: 0.8,
    delay: 0,
    repeat: 0,
    repeatDelay: 0.2,
    yoyo: false,
    ease: 'power2.out'
})

两端都声明

gsap.fromTo()

起点和终点都写死,不依赖外部样式,组件复用时最稳。

fromTo
适合复用型组件和复杂上下文。当前基点:50% 50%
gsap.fromTo(
  target,
  {
      x: 120,
      y: -24,
      scale: 1.15,
      rotation: 18,
      opacity: 0.35,
      borderRadius: 48,
      skewX: 0,
      skewY: 0,
      transformOrigin: '50% 50%'
  },
  {
      x: 0,
      y: 0,
      scale: 1,
      rotation: 0,
      opacity: 1,
      borderRadius: 24,
      skewX: 0,
      skewY: 0,
      transformOrigin: '50% 50%',
      duration: 0.8,
      delay: 0,
      repeat: 0,
      repeatDelay: 0.2,
      yoyo: false,
      ease: 'power2.out'
  }
)

三个基础 API 的区别

API你声明的重点适合什么场景
gsap.to()结束状态当前样式已稳定,想补间到目标状态
gsap.from()起始状态最终样式已经在 CSS 里,想做入场
gsap.fromTo()起点和终点不想依赖外部样式,或者组件复用环境复杂

时间参数怎么影响观感

参数作用直接效果
duration补间持续时间越短越干脆,越长越有表演感
delay开始前等待用于错峰启动、让位给别的交互
repeat重复次数适合 loading、强调反馈、呼吸动效
repeatDelay每轮重复之间的间隔让循环更有停顿感
yoyo往返播放常用于 ping-pong、悬浮微动、脉冲
ease速度曲线决定动画的性格,不只影响速度

视觉属性怎么理解

属性含义常见用途
x / y沿坐标轴位移入场、抽屉、标签切换
scale缩放倍数按钮反馈、卡片强调、缩放入场
rotation旋转角度图标翻转、卡片旋出、装饰动效
opacity透明度淡入淡出、占位内容过渡
borderRadius圆角变化方卡到圆球、按钮圆角过渡
skewX / skewY倾斜角度做速度感、故障风、卡片错位
transformOrigin变换基点决定缩放和旋转围绕哪里发生

参数联动时要注意什么

yoyo 只有在 repeat > 0 时才有意义

如果重复次数还是 0,打开 yoyo 不会产生真正的往返效果。

transformOrigin 会改变旋转和缩放的观感

同样是 rotation: 180

  • 以中心为基点,会像原地翻转。
  • 以左上角为基点,会像围绕角落甩出去。
  • 以底边为基点,会更像菜单、抽屉或卡片翻起。

from() 适合“回到设计稿状态”

如果设计稿里的默认样式就是最终状态,from() 会比 to() 更自然,因为你只需要描述“它从哪里来”。

fromTo() 最适合做稳定的组件化动画

当一个组件会在多个页面、多个主题或不同初始样式下复用时,显式声明起点和终点会更可控。

常用写法模板

ts
gsap.to('.card', {
  y: -12,
  scale: 1.02,
  duration: 0.35,
  ease: 'power2.out'
})
ts
gsap.from('.hero-title', {
  y: 32,
  opacity: 0,
  duration: 0.9,
  ease: 'power3.out'
})
ts
gsap.fromTo(
  '.drawer',
  { x: 320, opacity: 0 },
  { x: 0, opacity: 1, duration: 0.6, ease: 'power2.out' }
)

调参建议

  • 页面主交互优先先定 duration,再选 ease,最后调位移量。
  • 微交互优先控制在 0.2s ~ 0.45s,避免拖泥带水。
  • 如果动画“显得重”,通常先减小位移和旋转,不一定要缩短时间。

基于 VitePress 的个人知识库骨架