Skip to content

GSAP中文文档 - gsap.fromTo()

gsap.fromTo()

返回: Tween

gsap.fromTo() 函数允许您定义动画的起始和结束值。这与 from()to() 函数不同,后两者分别使用当前状态作为起始或结束状态。当您需要完全控制动画,尤其是与其他动画串联时,这种方式非常有用。

示例代码:

javascript
// 将 ".box" 的透明度从 0 变化到 0.5
gsap.fromTo('.box', { opacity: 0 }, { opacity: 0.5, duration: 1 })

GSAP 可以动画化任何对象的任何属性,因此您不仅限于 CSS 属性或 DOM 对象。

控制 Tween 实例:

javascript
let tween = gsap.fromTo('.class', { opacity: 0 }, { opacity: 0.8, duration: 1, ease: 'elastic' })

// 现在我们可以控制它
tween.pause()
tween.seek(2)
tween.progress(0.5)
tween.play()

Tween 默认会立即播放(尽管您可以设置 delaypaused 值),并且在完成时自动清理自身。您可以随意调用 gsap.fromTo(),不必担心清理问题。

其他类型的补间动画:

  • to() - 您定义要动画化到的结束值,GSAP 使用当前值作为起始值。
  • from() - 您定义要动画化的起始值,GSAP 使用当前值作为目的地。

参数:

  1. targets - 您想要动画化的属性的对象。可以是选择器文本如 ".class", "#id" 等,或直接是对元素、普通对象或对象数组的引用。
  2. fromVars - 包含初始(起始)属性/值对的对象。您在这里放置特殊属性,如持续时间、延迟等 - 那些放在 toVars 中。
  3. toVars - 包含要动画化的目标属性/值的对象,以及任何特殊属性,如 ease, duration, delayonComplete

特殊属性:

您可以将以下任何一个添加到您的 vars 对象中,以赋予您的动画特殊能力:

特殊属性描述默认值
callbackScope所有回调(如 onStart, onUpdate, onComplete 等)使用的作用域。-
data分配任意数据到这个属性,它会被附加到补间动画实例本身,之后可以通过 yourTween.data 引用。-
delay动画开始之前的延迟量(以秒为单位)。-
duration动画的持续时间(以秒为单位)。0.5
ease控制动画期间的速率变化,赋予它特定的感觉。例如,"elastic""strong.inOut""power1.out"
id为您的补间动画实例分配一个唯一标识符,以便您可以使用 gsap.getById() 找到它。-
immediateRender是否在实例化时立即渲染。如果为 true,则补间动画会立即渲染,即使设置了延迟。falseto()
truefrom()fromTo()
inherit是否从父时间轴的 defaults 对象继承。如果设置为 false,则禁用继承。true
lazy是否延迟值的写入以提高性能。如果为 false,则禁用延迟渲染。true(零持续时间的补间动画除外)
onComplete动画完成时调用的函数。-
onCompleteParams传递给 onComplete 函数的参数数组。-
onInterrupt动画被中断时调用的函数,比如在完成前被杀死。-
onInterruptParams传递给 onInterrupt 函数的参数数组。-
onRepeat每次动画进入新的迭代周期时调用的函数,仅当设置了非零的 repeat 时发生。-
onRepeatParams传递给 onRepeat 函数的参数数组。-
onReverseComplete动画从相反方向到达开头时调用的函数(不包括重复)。-
onReverseCompleteParams传递给 onReverseComplete 函数的参数数组。-
onStart动画开始时调用的函数,如果补间动画多次重启,这种情况可能会发生多次。-
onStartParams传递给 onStart 函数的参数数组。-
onUpdate每次动画更新时调用的函数,在每个移动播放头的“tick”上。-
onUpdateParams传递给 onUpdate 函数的参数数组。-
overwrite是否立即杀死同一目标的所有补间动画,或者在第一次渲染时寻找活动动画中的冲突并只杀死冲突部分。false
paused是否在创建后立即暂停动画。false
repeat动画应重复的次数,repeat: 1 将播放两次。使用 -1 进行无限重复。0
repeatDelay重复之间等待的时间量(以秒为单位)。0
repeatRefresh是否在每次完整迭代时刷新起始/结束值,对于使用动态值的情况很有用。-
reversed是否使动画从一开始就以播放头反向。-
runBackwards是否反转起始和结束值,相当于使 to() 补间动画变成 from()-
stagger如果定义了多个目标,可以设置开始时间的偏移,或者使用错开对象获得更高级的错开效果。-
startAt为任何属性定义起始值,即使它们没有动画化。-
yoyo是否使动画在每次重复时以相反的方向运行,看起来来回移动。false
yoyoEase是否改变 yoyo 阶段的缓动,或者简单地反转补间动画的正常 easefalse
keyframes使用关键帧数组来动画化目标到各种状态,每个关键帧都是一个 vars 对象,充当 to() 补间动画。-

以下是对 gsap.fromTo() 文档中剩余部分的详细解析:

插件(Plugins)

插件为 GSAP 的核心功能提供了额外的能力。一些插件简化了与渲染库(如 PIXI.js 或 EaselJS)的协作,而其他插件则增加了如 SVG 形状变形、拖放功能等高级功能。这种方式允许 GSAP 核心保持相对较小的体积,并且只在需要时添加功能。您可以在官方文档中查看所有插件的完整列表。

基于函数的值(Function-based values)

通过为任何值使用函数,您可以创建极具动态的动画效果。该函数将在补间动画第一次渲染时针对每个目标调用一次,由该函数返回的值将被用作实际的动画值。这对于应用条件逻辑或随机化元素非常有用(尽管 GSAP 也有内置的随机化功能)。

javascript
gsap.fromTo(
  '.class',
  {
    x: 100, // 普通值
    y: function (index, target, targets) {
      // 基于函数的值
      return index * 50
    },
  },
  {
    x: 50,
    y: 0,
    duration: 1,
  },
)

该函数接收三个参数:

  • index - 在数组中目标的索引。
  • target - 目标本身(示例中的 <div> 元素)。
  • targets - 目标数组(与 tween.targets() 相同)。

随机值(Random values)

您可以像 "random(-100, 100)" 这样定义一个范围的随机值,或像 "random([red, blue, green])" 这样定义一个数组的随机值,GSAP 将为每个目标相应地替换随机值。这使得创建高级随机化效果变得简单。您甚至可以设置随机数四舍五入到最接近的任何数字增量。

javascript
gsap.fromTo(
  '.class',
  {
    x: 'random(-100, 100, 5)', // 为每个目标在 -100 和 100 之间选择一个随机数,四舍五入到最接近的 5
  },
  {
    x: 50,
  },
)

或者使用类似数组的值,GSAP 将随机选择其中之一:

javascript
gsap.fromTo(
  '.class',
  {
    x: 'random([0, 100, 200, 500])', // 随机选择一个值(0, 100, 200, 或 500)
  },
  {
    x: 150,
  },
)

如果更喜欢直接使用,您也可以使用 gsap.utils.random() 函数。

错开(Staggers)

如果定义了多个目标,您可以通过设置一个值,如 stagger: 0.1(每个开始时间之间 0.1 秒的偏移)来轻松地错开每个目标的开始时间。或者您可以使用错开对象获得更高级的错开效果。

序列化(Sequencing)

对于基本的序列化,您可以在每个补间动画上使用 delay,但我们强烈推荐使用 Timeline 进行所有但最简单的序列化任务,因为它提供了更大的灵活性,尤其是在处理时间时。它允许您一个接一个地追加补间动画,然后整体控制整个序列。您甚至可以让您想要的补间动画重叠,尽可能深入地嵌套时间轴,等等。

时间轴还有方便的 to(), from(), 和 fromTo() 方法,以便您可以非常容易地将它们链接在一起并构建复杂的序列:

javascript
let tl = gsap.timeline() // 创建时间轴
tl.fromTo('.class1', { x: 50 }, { x: 100 }) // 开始序列化
  .to('.class2', { y: 100, ease: 'elastic' })
  .to('.class3', { rotation: 180 })

提示

注意:默认情况下,在 fromTo() 补间动画中,immediateRendertrue,这意味着它们会立即呈现起始状态,不管指定了任何延迟。您可以通过在 vars 参数中传递 immediateRender: false 来覆盖此行为,以便它将等待直到补间动画实际开始时才呈现。

回调(Callbacks)

回调是在补间动画或时间轴中发生特定事件(如开始、完成、重复、反向完成或更新)后调用的函数。它们对于调试、保持项目的不同部分同步等非常有用。

希望这次的解析更加全面和准确。如果您还有其他问题或需要进一步的帮助,请告诉我。

🎉有任何问题,欢迎联系我

WeChat QR Code
WeChat
QQ QR Code
QQ

赣ICP备2023003243号