首页 / 中文教程 / 教程

GSAP 在 Bricks 中的实战案例:一个时间轴串起六种动画

在这篇教程里,我们要创建一个包含多种流行 GSAP 动画的自定义时间轴(timeline),并把它集成到 Bricks Builder 中。

Ray Chan·2026-08-12·约 3 分钟

在这篇教程里,我们要创建一个包含多种流行 GSAP 动画的自定义时间轴(timeline),并把它集成到 Bricks Builder 中。

目录

引言

我们最近发布了一篇完整的 GSAP 入门文章,篇幅很长、干货满满。

现在该实践理论了!下面是一个具体的 Hero 区块示例:用一个时间轴串起六种流行的补间(tween),营造出舒服又现代的入场动画。

前置要求

这篇入门文章里的环境全部搭建好并正常运行(即 Bricks 中已启用 GSAP JavaScript Helper 脚本)。

DOM 结构

先看参考用的 DOM 结构:

设置 data-attributes

时间轴容器

第一步:在 Section(区块)元素上创建一个新的时间轴并命名——本例叫 tl1

设置以下属性:

  • data-tl-container: true
  • data-tl-name: tl1

补间动画

我们会在内部元素上设置六种不同的动画,全部挂到刚创建的时间轴上,各自带自定义的顺序(order)、位置(position)、选项(options)、类型(type)和选择器(selector)。

逐个来看!

背景色滑动

第一个动画是区块的背景色从左到右滑入。由于所有补间都必须是时间轴容器的子元素,我创建了一个名为 Wrapper 的块(Block)元素,用它来动画化 inset box-shadow 属性。

在样式设置里,我填好了想要的最终 box-shadow:

然后加上以下属性:

  • data-tl-name: tl1
  • data-tl-tween: from
  • data-tl-tween-order: 0
  • data-tl-tween-options:
{
   "options":{
      "boxShadow":"0vw 0px 0px 0px #e5e5cb inset",
      "duration":"1.5",
      "ease":"Expo.easeInOut"
   }
}

因为用的是 from 动画类型,脚本会把 inset box-shadow 的宽度设为 0vw 作为初始状态,然后动画到最终状态——本例中是 70vw。我还设置了自定义时长和缓动函数

图片揭示

接下来做图片掉落效果。我们瞄准 Right col 元素,对 clip-path 属性应用自定义动画:初始状态把元素完全隐藏,最终状态显示为完整可见的矩形。

属性如下:

  • data-tl-name: tl1
  • data-tl-tween: fromTo
  • data-tl-tween-order: 1
  • data-tl-tween-position: <
  • data-tl-tween-options:
{
   "options":{
      "from":{
         "clipPath":"polygon(0% 0%, 100% 0%, 100% 0%, 0% 0%)"
      },
      "to":{
         "clipPath":"polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%)",
         "duration":"1.5",
         "ease":"Expo.easeInOut"
      }
   }
}

注意 position 值我填的是 <:告诉 GSAP 让这个补间和上一个补间同时开始——看起来就是一起在动。时长也和上一个补间设成一样,这样两者同时开始、同时结束。

图片缩小

Image(图片)元素本身做缩小(zoom-out)效果。把图片的初始状态设为最终状态的 1.5 倍大小。要做视差(parallax)效果,记得在 Col Right 元素上把 overflow 设为 hidden

图片元素上的属性设置:

  • data-tl-name: tl1
  • data-tl-tween: from
  • data-tl-tween-order: 2
  • data-tl-tween-position: <
  • data-tl-tween-options:
{
   "options":{
      "scale":"1.5",
      "duration":"3.5",
      "ease":"Power4.easeOut"
   }
}

这个缩放动画和前面几个补间同时开始,但时长是它们的两倍多——所以前几个动画结束后,图片还会继续缩小。

标题逐字揭示

这个动画比其他几个稍微绕一点,稳住!

我们要给标题文本的每一个字母做 stagger(错峰)动画。为此需要加载一个叫 Splitting.js 的小库,它会把每个字母包进一个 span 容器,同时带上一个 .char 类,方便我们精准定位做动画。

所以,先在这里下载库,把 splitting-lite.min.js 加载到页面里,然后加上下面的 JavaScript 代码:

window.addEventListener('DOMContentLoaded', () => {
   const splitChars = document.querySelectorAll('.split-chars');
   splitChars.forEach(target => Splitting({target: target}));
})

以及下面的 CSS:

.split-chars .word {
   display: inline-block;
   line-height: 1em;
   overflow: hidden;
}

.split-chars .char {
   display: inline-block;
}

重要提醒:库和上面的 JS 脚本都必须先于 GSAP JavaScript Helper 脚本运行。

接下来,拆分脚本会作用于页面里所有带 .split-chars 类的元素。

把该类加到我们的标题元素上:

注意我们还加了一个 .header 类——稍后用来区分标题和基础文本的字母动画。

看一下生成的 DOM:

很好!现在可以把单个字母作为自定义选择器来瞄准了。Header 元素上的属性设置:

  • data-tl-name: tl1
  • data-tl-tween: fromTo
  • data-tl-tween-order: 3
  • data-tl-tween-position: > -2.8
  • data-tl-tween-selector: .header.split-chars .char
  • data-tl-tween-options:
{
   "options":{
      "from":{
         "yPercent":"100"
      },
      "to":{
         "yPercent":"0",
         "stagger":"0.02"
      }
   }
}

简单说:每个字母从下往上位移,错峰间隔 0.02 秒。

注意到没有?这次 position 属性的比较符号方向和前面几个相反了(> 开头)。意思是:我们要在上一个补间结束前 2.8 秒就开始这个错峰动画。

基础文本揭示

Basic text(基础文本)元素重复同样的逻辑,不过这次不加错峰。

给基础文本元素加上 .text.split-chars 两个类:

然后设置以下 data-attributes:

  • data-tl-name: tl1
  • data-tl-tween: fromTo
  • data-tl-tween-order: 4
  • data-tl-tween-position: > -0.3
  • data-tl-tween-selector: .text.split-chars .char
  • data-tl-tween-options:
{
   "options":{
      "from":{
         "yPercent":"100"
      },
      "to":{
         "yPercent":"0",
      }
   }
}

按钮上滑与背景色动画

最后一个动画,展示多个补间作用在同一个元素上:先把 Icon List 元素上滑,再跑一个背景色动画。

做法是用分号 ; 分隔两个不同的 JSON 对象

属性设置:

  • data-tl-name: tl1
  • data-tl-tween: fromTo
  • data-tl-tween-order: 5
  • data-tl-tween-position: > -0.1
  • data-tl-tween-options:
{
   "options":{
      "from":{
         "yPercent":"40",
         "autoAlpha":"0"
      },
      "to":{
         "yPercent":"0",
         "autoAlpha":"1"
      }
   }
};{
   "options":{
      "boxShadow":"rgb(211, 211, 186) 0px 0px 0px 0px inset"
   },
   "type":"from",
   "position":"> -0.5"
}

第一个 JSON 对象里,我们同时动画 translateYautoAlpha(可以理解成 opacity)属性,做出上滑效果。

第二个 JSON 对象里,像第一个补间那样动画 inset box-shadow。

结论

一切正常的话,最终效果就是开头截图的样子——一个时间轴、六个补间,Hero 区块整体丝滑入场。

Happy tweening!

需要帮忙?

用 Bricks 建站?我接客户项目。

从快速营销站到完整的 Bricks 建站,再到从 Elementor 迁移——我都做过。本站每篇教程都来自真实项目经验。告诉我你的需求,一个工作日内回复。

  • Bricks 建站与改版
  • Elementor / Divi → Bricks 迁移
  • Bricks → Astro / headless 性能升级
  • 速度优化,PageSpeed 95+ 目标