“🧦绿袜子大侠“-GreenSock 动画库入门

一、简介

1.1) 自我描述

  • 现代化网页动画的标准
  • 强大的 JavaScript 工具集,可将开发人员变成动画超级英雄。

1.2) 资源与链接

1.3)安装

  • npm
sh 复制代码
npm install gsap
  • cdn
html 复制代码
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.2/gsap.min.js"></script>

二、最直观的 API 列表

通过 console.log(gsa) 直观的获取,顶层 api 列表,比官网更加贴近开发环境(但是作用内容还是需要阅读)。

从浏览器中查看全局 gsap 中可见可用的 api 列表。

三、化身"绿袜子大侠": 开始自己的第一个动画

ts 复制代码
const tween = gsap.to(".el", {rotation: 360, x: 500, duration: 1}); // el 元素的动画

3.1)以 React 为例, 使用 Vite + React 初始化一个项目(使用 css module 作为解决方案):

  • React 组件
ts 复制代码
import { useEffect } from 'react';
import gsap from 'gsap';

// styles
import styles from './Greate.module.css'

const Greate = () => {
  useEffect(() => {
    gsap.to(".el", {rotation: 360, x: 500, duration: 1});
  }, [])
  return <div className={['el', styles.el].join(' ')}>el</div>
}

export default Greate;
  • CSSModule 样式
css 复制代码
.el {
  width: 200px;
  height: 200px;
  background-color: aquamarine;
}
  • 效果

四、动画基础用法:to/from/fromTo

ts 复制代码
// 开始
const tween = gsap.from(".el", {rotation: 360, x: 500, duration: 1}); // el 元素的动画

// 结束
const tween = gsap.to(".el", {rotation: 360, x: 500, duration: 1}); // el 元素的动画

// 开始到结束
const tween = gsap.fromTo(".el", {rotation: 0, x: 0}, {rotation: 360, x: 100, duration: 1});

五、gsap.to 返回值的 tween 详解

5.1)属性

5.2)原型链上属性

  • 第一层属性
  • 第二层属性

5.3)tween 的暂停与播放

一个三秒的动画:2s 时自动暂停, 3s 时重启播放:

ts 复制代码
// 创建一个Tween动画
const tween = gsap.to(".el", {
  duration: 3,
  x: 200,
  y: 100,
  opacity: 0.5,
});

// 暂停动画
// 在一段时间后继续播放动画
setTimeout(() => {
  tween.play();
}, 2000);

tween 对象在原型上有 pauseplay 两个方法用于 暂停播放。其他的属性就不在探索了。

六、Timeline

时间轴功能同样在 gsap 中得到了处理。在 gsap 中 Timeline 是一个可以容纳多个动画的实例容器。在 Timeline 中,可以按照顺或者同时播放动画。还可以设置延迟,重复,方向播放动画。时间轴非常有用。

6.1) 写法

  • 没有使用使用 Timeline, 使用 delay 来延迟第二个和第三个。
ts 复制代码
gsap.to("#id", {x: 100, duration: 1});
gsap.to("#id", {y: 50, duration: 1, delay: 1});      //wait 1 second
gsap.to("#id", {opacity: 0, duration: 1, delay: 2}); //wait 2 seconds
  • 使用了 Timeline, 不再需要 delay, 有了链式调用的特点
ts 复制代码
gsap.timeline()
    .to(".box", {
        duration: 2, // 动画持续时间为2秒
        x: "200px", // 沿X轴移动200像素
        opacity: 0, // 逐渐变透明
        ease: "power2.inOut", // 使用缓动函数控制动画的速度曲线
    })
    .to(".box", {
        duration: 0.1, // 动画持续时间为0.1秒
        x: "0", // 将X轴位置重置为0
        opacity: 1, // 将透明度重置为1
        delay: 1, // 延迟1秒执行
    })
    .repeat(-1) // 循环播放动画
    .play(); // 播放时间轴

元素从左侧移动到右侧并逐渐变透明,然后重置为初始状态,并且一直循环播放。

6.2) api 解读

  • timeline 函数调用之后的顶层 api
  • timelie 的第一层原型链
  • timeline 的第二层属性

具体属性就不再深入探索。

七、插件

7.1) 常用插件与列表

gsap 中通过插件的方式支持更加强大的动画能力。

  • ScrollTrigger 可以做滚动视差效果
  • TextPlugin 可以做文字效果
  • Bezier 可以自定义贝塞尔曲线

7.2)示例

ts 复制代码
gsap.registerPlugin(ScrollTrigger, /* MorphSVGPlugin ... 其他插件 */);

gsap.to(".box", {
  scrollTrigger: ".box", // start the animation when ".box" enters the viewport (once)
  x: 500
});

7.3) 基于 vite + CSS Module 的示例

  • 组件逻辑
ts 复制代码
import  { useEffect } from 'react';
import gsap from 'gsap';
import ScrollTrigger from 'gsap/ScrollTrigger';
import style from './index.module.css';

// 初始化ScrollTrigger插件
gsap.registerPlugin(ScrollTrigger);

const ScrollAnimatedElement = () => {
  useEffect(() => {
    // 创建动画
    const tl = gsap.timeline({
      scrollTrigger: {
        trigger: ".box", // 触发器元素
        start: "center center", // 触发动画的位置
        end: "bottom top", // 结束动画的位置
        scrub: true, // 启用平滑滚动
      },
    });

    // 在时间轴上添加动画
    tl.to(".box", {
      duration: 1, // 动画持续时间为1秒
      x: "100%", // 沿X轴移动400%(从左侧滑入)
      scale: 1, // 逐渐变大到原始尺寸
      opacity: 1, // 逐渐变为不透明
      // backgroundColor: "red", // 背景颜色变为红色
    });
  }, []);

  return (
    <div className={[style.container].join(' ')}>
      <div className={['box', style.box].join(' ')}></div>
    </div>
  );
};

export default ScrollAnimatedElement;
  • 样式逻辑
css 复制代码
.container {
  height: 120vh;
}

.box {
  height: 300px;
  width: 300px;
  background-color: bisque;
}

插件部分以 ScrollTrigger 为例,结合 vite + CSS Module 实现一个简单的 demo。

八、缓动函数

8.1) 缓动函数游乐场

在动画中,缓动函数是绕不开的话题,以下是官方的 Visualizer 可以当作一个 playground:

8.2)配置缓动函数

在 options 的 ease 中配置缓动函数:

ts 复制代码
gsap.to(graph, { duration: 2.5, ease: "power1.out", y: -500 });

九、其他

9.1)工具函数

辅助函数 描述
gsap.utils.toArray() 将类数组对象转换为数组。
gsap.utils.selector() 通过选择器选择多个元素,并将它们包装在GSAP对象中,以便于动画处理。
gsap.toFrom() 创建一个循环动画,首先执行 "to" 部分,然后执行 "from" 部分,然后循环。
gsap.delayedCall() 创建一个延迟调用函数,可以用于在一段时间后执行特定的操作。
gsap.set() 立即设置目标元素的属性,而不进行动画。通常用于初始化元素的状态。
gsap.killTweensOf() 终止指定元素上的动画。可以用于停止正在运行的动画。
gsap.registerEffect() 注册自定义动画效果,以便稍后重复使用。

9.2)stagger 交错动画

ts 复制代码
gsap.to(".box", {
  y: 100,
  stagger: 0.1 // 0.1 seconds between when each ".box" element starts animating
});

十、小结

本主要介绍了 GreenSock的核心功能,直观的给出了 API 在浏览中的列表,以及基本 api from/to/fromTo 等方法使用方法,同时常用的 timeline 作为核心功能也被支持,链式调用使用更加流畅,插件功能扩展动画能力,缓动函数以及工具函数和高级 stagger 都让 GreenSock 成一个优秀的动画库。当然更多的希望能够帮助读者朋友和同学,如果作者的文章写的还可以,不妨 wchat 关注 进二开物,更多内容同步分享。

相关推荐
清秋11 分钟前
全网最全 ECMAScript 攻略( 更新至 ES2026)
前端·javascript·编程语言
Cao_Ron28 分钟前
用 SVG image symbol 画 ECharts graph 圆形节点
前端
hxy060132 分钟前
React-Call让你的React组件像异步函数一样调用
前端·react.js
Hilaku33 分钟前
为什么 AI 写前端时,总是优先选择 React,而不是 Vue?
前端·javascript·程序员
京东云开发者35 分钟前
GPT-5.6、ChatGPT Work 与 Codex 更新食用指南
前端
Cao_Ron1 小时前
用 ECharts graph 画出卡片式矩形节点
前端
skiyee1 小时前
换个底座的 Wot Starter 居然让 AI 更懂项目!
前端·ai编程
anyup1 小时前
这一套绝了!AI 大模型写故事,星云 SDK 驱动 3D 数字人实时演绎
前端·人工智能·aigc
神奇小汤圆1 小时前
2026 Java岗面试题库(已收录GitHub),覆盖所有考点
后端
耀耀切克闹灬1 小时前
短链跳转
前端