发布于 2026-01-05 3 阅读
0

使用 GSAP 实现 Web 动画指南(只需一行 JavaScript 代码) - 第一部分

使用 GSAP 实现 Web 动画指南(只需一行 JavaScript 代码) - 第一部分

本文将教你如何仅用一行 JavaScript 代码,就能让网站上的元素轻松移动。🦹‍♀️

GSAP 代表 GreenSock 动画平台,它能为任何 JavaScript 可以操作的对象(CSS 属性、SVG、React、canvas、通用对象等等)添加动画效果,并能解决无数浏览器兼容性问题,而且速度极快(比jQuery快 20 倍)。它已被大约1000 万个网站和众多知名品牌使用。您可以在这里了解更多关于 GSAP 的信息

几周前我写了一篇关于如何使用 JavaScript 和 CSS 为网页内容添加动画的文章,但我一直在寻找更好、更简单、更便捷的网页动画方法,直到我在 Twitter 上发现了 GSAP。我决定仔细阅读它的文档,结果就爱上了 GSAP。

开始之前

动画的本质就是每秒多次改变属性值,从而使物体看起来移动、淡入淡出、旋转等等。🦸‍♀️

动画的一个完美例子是:x在一秒钟内将物体的坐标从 0 变为 1000,它就会快速向右移动。opacity而从 1 逐渐变为 0,则会使元素淡出。

作为动画师,你的工作是决定要改变哪些属性、改变的速度以及运动的风格(称为缓动——我们稍后会讲到)。

我可以用GSAP制作哪些动画?

GreenSock 动画平台 (GSAP) 可以为任何 JavaScript 可以操作的对象添加动画,例如 CSS 属性、SVG、React、canvas、通用对象等等。

入门

获得GSAP的方法有很多种。你可以

  • 从CDN加载,
  • 请从我们的网站下载,
  • 通过 NPM/Yarn 安装,或者
  • 请从GitHub获取。更多详情请参阅安装页面。

将核心 GSAP 工具添加到页面的最简单方法是使用类似这样的脚本标签😁:

<script  src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.4.0/gsap.min.js"></script>
Enter fullscreen mode Exit fullscreen mode

搞定了?那你就可以走了!😘

注意:请务必查看安装指南,了解获取 GSAP 的其他方法。


还记得我说过我们只需要一行 JavaScript 代码吗!这可是真的🥴……

我们可以将 JavaScript 代码写在单独的 js 文件中,也可以放在 HTML 文件的 script 标签内。但请务必确保 JavaScript 文件位于 GSAP 链接之后。以下示例中,我的 js 文件是:app.js

<script  src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.4.0/gsap.min.js"></script>
<script  src="app.js"></script>
Enter fullscreen mode Exit fullscreen mode

在本文中,我们将使用 4 种基本方法/补间动画,我将使用 CodePen 中的示例来正确地说明它们的工作原理:

  • gsap.to()
  • gsap.from()
  • gsap.fromTo()
  • gsap.set()

gsap.to()

要创建动画,gsap.to() 需要 2 个东西:

  • 目标 - 你要设置动画的对象。它可以是一个原始对象、一个对象数组,或者像“.myClass”这样的选择器文本。
  • vars - 一个包含属性/值对的对象,用于设置动画效果(例如 opacity:0.5、rotation:45 等),以及其他可选的特殊属性,例如 duration 和 onComplete。

例如,要在 1 秒内将类名为“box”的元素移动到 x 坐标 100(等同于 transform: translateX(100px)):

gsap.to(".box", {duration: 1, x: 100});
Enter fullscreen mode Exit fullscreen mode

这是一个利用gsap.to()🤯的完美例子

  • 标题的不透明度在动画播放 1 秒后变为 0.3。
  • 盒子在 x 方向上移动了 300 像素。
  • 最后,绿色方框在动画过程中旋转,并且由于添加了缩放值,其尺寸也减小了。

gsap.from()

这主要用于网页内容动画,它会将元素从指定位置动画到元素实际所在的位置……

例如,假设您的“.box”元素当前的自然x位置为,0并且您创建了以下补间动画:

gsap.from(".box", {duration: 1, x: 50});
Enter fullscreen mode Exit fullscreen mode

.box会立即跳到 x 值为 50,然后动画过渡到 x 值为 0(或者动画开始时的值)。
换句话说,它是从你提供的值开始,动画过渡到当前值。

以下是一个完美的例子:

这就引出了另一种方法……🤓

gsap.fromTo()

这种方法允许你定义动画对象的起始值和结束值。

例子

//tweens from width 0 to 50 and height 0 to 100
gsap.fromTo(".box", {width: 0, height: 0}, {duration: 1.5, width: 50, height: 100});
Enter fullscreen mode Exit fullscreen mode

最后,我要解释的最后一种方法是集合方法。

gsap.set()

它用于立即设置一些属性。它本质上是一个零持续时间的补间动画,因此您可以使用与其他 GSAP 补间动画相同的所有属性。

例如

gsap.set(".boxTitle", {fontSize: 20, x: 10});
Enter fullscreen mode Exit fullscreen mode

至此,我们已经介绍了一些基本的补间动画或方法,但相信我,还有很多重要的内容我无法在本文中一一提及,所以我强烈建议您在阅读完本文后查阅相关文档,以便更好地理解。


本文最后要解释的几点是:

  • 特殊属性
  • 缓解
  • 踉跄

最后,我将解释一些关于如何管教青少年的事情。

特殊属性

特殊属性类似于保留关键字,GSAP 对其的处理方式与普通(动画)属性不同。特殊属性用于定义回调、延迟、缓动、交错等效果。

特殊属性的一个基本例子是持续时间(我们已经用到过它了):

gsap.to("#logo", {duration: 1, x: 100});
Enter fullscreen mode Exit fullscreen mode

其他常见的特殊性质包括:

  • 延迟 - 动画开始前的延迟时间。
  • onComplete - 动画完成后应调用的回调函数。
  • onUpdate - 每次动画更新/渲染时都应该调用的回调函数。
  • ease - 应该使用的 ease 类型(例如“power2.inOut”)。
  • 错开 - 错开每个目标/元素动画的开始时间。

缓解

这决定了补间动画的运动风格,也是动画流畅美观的关键。它ease控制着补间动画期间的变化速率。文档中提供了一个交互式工具,可以让你直观地探索各种缓动效果。🧐

例如

gsap.to("#logo", {duration: 1, x: 300, ease: "bounce"});
Enter fullscreen mode Exit fullscreen mode

在上面的例子中,我们使用了…… bounce,但我们还有其他例子,例如:

  • 松紧带
  • 粗糙的
  • 慢的
  • 后退
  • 正弦等等🤗

踉跄

我觉得这很有意思。交错动画可以轻松地为一组物体添加动画效果,每个物体的动画开始时间之间可以设置一个很小的延迟。

例如

别被上面的代码搞糊涂了,我只是为了方便理解才把代码拆分成几行来解释的。🤔

GSAP 还有其他一些很棒的功能,我建议你查阅他们的文档,因为这里使用的大部分示例都来自他们的文档。但在教程结束之前,我将解释一下。

控制动画

虽然这可能对网页内容没什么实际用处,但我们有了这个想法,挺酷的。

要控制动画,你需要一个 Tween 实例。`setTween()` 、`
setTween ()` 和 `setTween() ` 方法都会返回一个 Tween 实例,因此你可以将其存储为变量,然后轻松地对其进行控制:to()from()fromTo()

//create a reference to the animation
var tween = gsap.to("#logo", {duration: 1, x: 100});

//pause
tween.pause();

//resume (honors direction - reversed or not)
tween.resume();

//reverse (always goes back towards the beginning)
tween.reverse();

//jump to exactly 0.5 seconds into the tween
tween.seek(0.5);

//jump to exactly 1/4th into the tween's progress:
tween.progress(0.25);

//make the tween go half-speed
tween.timeScale(0.5);

//make the tween go double-speed
tween.timeScale(2);

//immediately kill the tween and make it eligible for garbage collection
tween.kill();
Enter fullscreen mode Exit fullscreen mode

这里有一个完美的例子来解释如何控制缓动动画。

就是这样

我们已经了解了创建动画并将其应用到元素的基础知识。虽然还有很多其他内容我们没有解释,但我相信这些对你有所帮助。🤗

请务必查看GSAP 文档以获取更多信息。


和往常一样,有任何问题或建议,欢迎留言或在推特上联系我🤭!记得在社交媒体上关注我哦!😎


点击此处阅读第二部分

文章来源:https://dev.to/olawanle_joel/a-guide-to-web-animation-with-gsap-1-line-of-javascript-code-anm