使用gsap.timeline()创建时间轴
可以将它赋值给一个变量,从而方便引用。时间轴上可以挂载各种tween。默认依次执行。
let tl = gsap.timeline();
tl.from("xxx", {...})
.form("xxxx", {...})
.to("xxx",{...});
有了时间轴,可以更方便的管理每一段tween,而不用过多考虑各段的delay,不用担心修改一处tween会对其他产生影响,可以轻松的操作整段动画:循环播放、快速跳转等等操作。
时间轴中tween的第三个参数:position
第三个参数用来指示tween开始的时间节点。默认情况一个tween紧接着另一个,上一个播放完就播放下一个。通过设置position参数可以改变这一默认行为:
- "+=1" / "-=1":带引号的+=,-=,表示延后若干秒、提前若干秒播放一个tween
- "<":带引号的<,表示上一个tween的开始时间,可以用它方便的同步开始两个tween
- "<1" / "<-1":带引号的<再跟一个秒数,可以以前一个tween开始时间为基准提前或延后本段tween开始的时间
- 1:不带引号的数字,可以直接指定tween开始的时间
时间轴的播放控制
与tween的播放控制类似:
let animation = gsap.timeline();
document.getElementById("play").onclick = ()=> animation.play();
document.getElementById("pause").onclick = ()=> animation.pause();
document.getElementById("reverse").onclick = ()=> animation.reverse();
document.getElementById("restart").onclick = ()=> animation.restart();
在timeline挂载tween的过程当中,可以通过 .add("标签名") 的方式在时间轴上设置一些时间标签。
然后就可以在时间轴的播放控制中直接跳转到这些时间点开始播放:
animation.play("标签名");
gsap.timeline()的参数
可以传入一个对象对时间轴进行设置:
gsap.timeline( { repeat:1, yoyo:true } ); // 设置重播及yoyo
timeline defaults
gsap.timeline( { defaults: { opacity:0; ease:back } } ); // 设置每一个tween的默认值
使用GSDevTools,可视化时间轴控制,辅助调试
- 引入GSDevTools3.min.js文件
- 在代码中插入一行:GSDevTools.creat(); 即可。
丰富优化动画的节奏感和flow
调整时间轴中每段tween的duration、ease还有position设置,尝试一下便会有感觉。张弛有度。
移除Flash of Un-styled Content (FOUC)
- 为避免闪烁,设置CSS先将目标给隐藏: visibility:hidden;
- 将动画封装到一个函数中,比如: init(){ ... }
- 修改动画中的代码,设置from动画由 autoAlpha: 0 淡入
- 添加js代码,页面加载完成后再触发动画:window.addEventListener( "load", function(event) { init(); } );
autoAlpha属性
autoAlpha大部分时候与alpha是一样的,只是当其值达到0时,autoAlpha会自动将visibility设置为hidden。一旦值不为0,autoAlpha会自动将visibility设置为inherit。
所以一个from autoAlpha 0,会自动让之前visibility hidden的对象显示出来,并让opacity从0到1(因为默认的opacity都是1)。