首发于落日间
笔记:可能是最绿的js动画库 Getting Start with GSAP

笔记:可能是最绿的js动画库 Getting Start with GSAP

前段时间在不同的人的内容里看到这个绿色壮汉,经过一些简单研究之后发现是类似unity中的DoTween一样的插件,并且其中有很多很方便的设计。本文主要内容是来自其基本介绍的文章/视频

greensock.com/

CDN

cdnjs.cloudflare.com/aj

这边有提到和Pixi.js的demo的实例 pixijs.io/examples/# 以及说明 greensock.com/docs/v2/P

GSAP非常的灵活,几乎可以处理所有页面上可以通过JS进行改变的元素,例如:

  • CSS:2D和3D变换,颜色,widthopacityborder-radiusmargin,和几乎所有CSS值。
  • SVG属性:viewBoxwidthheightfillstrokecxropacity,等插件,像MorphSVG和DrawSVG可用于高级特效。
  • 任何数值,例如,呈现为的对象<canvas>。对3D场景中的相机位置进行动画处理或过滤值。GSAP通常与Three.js和Pixi.js一起使用。

更多的参数 greensock.com/docs/v3/G

gsap.to(targets,vars):从开始的位置到结束的位置。

  • targets - 你需要添加动画的对象,可以是object,array和选择器".myClass"
  • vars - 一个对象,里面包含你想要改变的属性,延时,已经回调函数等。

Getting Started

基本函数与缓动Ease

基本的函数使用,第一个参数是目标id,后面的都是可修改的属性,以及 ease 缓动类型

gasp.to("_logo",{
	duration: 2, 
	x:300, 
	backgroundColor:"#560563", 
	borderRadius:"20%", 
	border:"5px solod white"
	ease:"elastic" //可以设置各种各样的内容了“back” / "bounce"
})

其中的不同Ease缓动类型 greensock.com/ease-visu

Callback以及多对象中心

gsap.set(".logo, .astronaut", {transformOrigin: "50% 50%"});

gsap.to(".logo, .astronaut", {duration:2, rotation:360});

var myObject = {rotaion:0};
gsap.to(myObject,{duration:2, rotation:360, onUpdate: function(){
	console.log(myObject.rotation);
}})

在gasp.to的过程中有的callback方法有

  • onComplete:动画完成时调用。
  • onStart:动画开始时调用
  • onUpdate:每次动画更新时调用(在动画处于活动状态时每帧调用)。
  • onRepeat:每次动画重复时调用一次。
  • onReverseComplete:动画反转后再次到达其起点时调用。

From 反向

将开始作为结束点,反过来

gasp.from(".logo", {duration:1.5, opacity:0, scale:0.3, ease:"back"});

Stagger

可以直接调用一系列 class="circle"

gsap.form(".circle", {duration:1, opacity:0, y:150, stagger:0.25});

并且使用stagger来进行带有offset效果的ease,更多可以参考 链接 Advanced staggers codepen.io/GreenSock/pe

并且可以在出发点上引入随机数,使用“random(-200,200)”来进行,更多这类地函数可以参考 UtilityMethod greensock.com/docs/v3/G

gsap.from(".circle", {duration:1, opacity:0, y:() =>Math.random()*400-200, stagger:0.25});
gsap.from(".circle", {duration:1, opacity:0, y:"random(-200,200)", stagger:0.25});

Control

document.querySelector()

var tween = gsap.to("#app", {
    duration: 1,
    x: 100,
    onComplete: tweenComplete,
    onCompleteParams: ["done!"]
});

document.querySelector("#pause").onclick = ()=> tween.pause();

=> {tween.seek(2); sequenceUpdateDragger();};
=> {tween.progress(0.2); sequenceUpdateDragger();};
=> tween.reverse();
=> tween.timeScale(4);
  • tween.pause(); 暂停
  • tween.resume(); 恢复
  • tween.reverse(); 反向播放
  • tween.seek(0.5); 跳到0.5s
  • tween.progress(0.25); 跳到4分之1处
  • tween.timeScale(0.5); 速度减慢
  • tween.timeScale(2); 速度翻倍
  • tween.kill(); 删除动画

Sequence

可以用gasp.timeline将不同的tween组合在一起,然后其中的delay关系就会是一个相对的,如果没有delay,那就会是接续进行,可以很方便地进行插入

关于Position parameter greensock.com/position-

var tl = gasp.timeline({repeat:2, yoyo:true}) //重复2次,第二次反向yoyo
tl.from(".logo", {duration:1.5, opacity:0, scale:0.3, ease:"back"});
tl.from(".circle", {duration:1, opacity:0, delay:1.5, y:150, stagger:0.25});
tl.from(".logo", {duration:1.5, opacity:0, scale:0.3, ease:"back"},"+=1");
//通过在后面增加position parameter来进行相对化地增加

并且还可以加入更多地Label来进行动画之间地调整

  • repeat:动画重复的次数。
  • repeatDelay:两次重复之间的间隔时间(以秒为单位)。
  • yoyo:如果为true,则每次重复播放都会前后交替进行。
  • delay:时间轴开始之前的延迟(以秒为单位)。
  • onComplete:时间线播放完毕后调用的函数。

其他的付费功能 greensock.com/club/





落日间其他同类内容:

叶梓涛:做个网页游戏分享给朋友吧!

叶梓涛:笔记:GJ Gammon 的 Diving In: Pixi JS


知乎还有一位小伙伴 @沧沧凉凉 做了不少GASP的教程

上文部分的内容引自他的文章

GSAP(GreenSock):最健全的web动画库之一 zhuanlan.zhihu.com/p/14

GSAP动画插件-ScrollTrigger(一)zhuanlan.zhihu.com/p/34

用CSS做出漂亮的字体动画 _ https://www.cclliang.com/2021/01/31/web开发/用CSS做出漂亮的字体动画/

HTML动画的那些事-车轮旋转篇 zhuanlan.zhihu.com/p/34

GSAP动画插件-Flip Plugin(一)zhuanlan.zhihu.com/p/34

GSAP动画插件-TextPlugin zhuanlan.zhihu.com/p/34

编辑于 2021-06-30 10:55