前端动画库GSAP,一起来了解一下

1,243 阅读2分钟
视频地址: 【HTML/CSS/JS】前端动画库GSAP,一起来了解一下
js动画 css动画
效果图

在这里插入图片描述

在这里插入图片描述

GSAP特点
    1.运行速度快
    2.健全性:包含了很多基础动画
    3.兼容性:像html svg react 新旧浏览器 移动端它都处理的很好
    4.任何对象都可以实现动画
    5.零依赖
    6.轻量可扩展:将功能拆分成不同的动画模块,可以按需使用
      GSAP提供4个库文件供用户使用
	  (1)TweenLite:这是GSAP动画平台的核心部分,使用它可以用来实现大部分的动画效果,适合来实现一些元素的简单动画效果。
	  (2)TimelineLite:一个强大的,轻量级的序列工具,它就如一个存放补间动画的容器,可以很容易的整体控制补间动画,且精确管理补间动画彼此之间的时间关系。比如动画的各种状态,Pause,reverse,restart,speed up,slow down,seek time,add labels等。它适合来实现一些复杂的动画效果。
	  (3)TimelineMax:扩展TimelineLite,提供完全相同的功能再加上有用的(但非必需)功能,如repeat,repeatDelay,yoyo,currentLabel()等。TimelineMax的目标是成为最终的全功能工具,而不是轻量级的。
	  (4)TweenMax:可以完成TimelineLite做的每一件事,并附加非必要的功能,如repeat,yoyo,repeatDelay(重复延迟)等。它也包括许多常见的插件,如CSSPlugin,这样您就不需自行载入多个文件。侧重于全功能的,而不是轻量级的。
  
    
引入方式
   cdn
   npm
常用方法
to
    to方法,从当前位置到指定位置,第一个参数是需要动画的对象,第二个是动画参数
from
    from方法,从指定位置到当前位置,和to方法相对
timeline
    GSAP可以创建timeline时间轴,更容易去控制动画和管理时间,时间轴提供了播放暂停反向倍速等几十个属性和方法	
staggerFormTo
    staggerFormTo是为多个目标创建一个有间隔的动画序列
    第一个参数是需要动画的对象或数组
    第二个是每个动画持续的秒数
    第三个和第四个分别是起始动画参数
    第五个参数每个动画开始的时间间隔
    第六个插入排序动画的位置
    第七个整个排序动画完成时触发的函数
主要代码
 <script>
        const tl1 = gsap.timeline()
        tl1.to(
            '.box-one', {
                x: 100,
                y: 100,
                scaleX: 2,
                rotation: 360,
                duration: 1,
                delay: 1,
                onComplete: () => {
                    console.log('end')
                }
            }
        ).from(
            '.box-two', {
                x: 100,
                y: 100,
                scaleY: 2,
                rotation: 360,
                duration: 2,
                delay: 1,
                repeat: 0,
                yoyo: true,
                backgroundColor: '#fff'
            }, '>-1'
        )
        setTimeout(() => {
            tl1.pause()
        }, 2500)
        
		const tl2 = gsap.timeline()
        tl2.staggerFromTo(
            'span', .5, {
                ease: Back.easeOut.config(1.7),
                opacity: 0,
                rotation: 180,
                y: -100
            }, {
                ease: Back.easeOut.config(1.7),
                opacity: 1,
                rotation: 360,
                y: () => {
                    return Math.random() * 50
                }
            }, .1, '+=0', () => {
                console.log('tl2:end')
            }
        )
    </script>