gsap基础一[from,to,fromTo]-LMLPHP

eases

速度动画

先来一个小demo

  <style>
    body {
      margin: 0;
      height: 100vh;
      display: flex;
      flex-direction: column;
    }

    .header {
      height: 15vh;
      background-color: red;
    }

    .links {
      display: flex;
      justify-content: space-around;
      align-items: center;
      color: white;
    }

    .content {
      flex-grow: 1; /* 剩下空间分给它*/
      display: flex;
      justify-content: space-between;
    }

    .button {
      flex: 1;
      text-align: center;
    }

    .sidebar {
      flex: 1;
      background-color: firebrick;
    }

    .footer {
      height: 15vh;
      background-color: khaki;
    }
  </style>
  <script src="gsap_dist/gsap.min.js"></script>
</head>
<body>
<div class="header">
  <div class="links">
    <div class="link">link 1</div>
    <div class="link">link 2</div>
    <div class="link">link 3</div>
  </div>
</div>
<div class="content">
  <div class="sidebar left"></div>
  <div class="button">Reverse!</div>
  <div class="sidebar right"></div>
</div>
<div class="footer"></div>
<script>
  gsap.from('.header', {
    duration: 1,/*持续时间*/
    y: '-100%',
    ease: 'bounce'/*查看官网api 搜索 Eases*/
  })
  gsap.from('.link', {
    duration: 1,
    opacity: 0,
    delay: 1,/*延迟1s*/
    stagger: .5/*交错执行,就是1执行完,再执行2,再执行3*/
  })
  gsap.from('.right', {
    duration: 1,
    delay: 1.5,
    x: '-100%'
  })
  gsap.from('.left', {
    duration: 1,
    x: '200%',
    ease:'elastic'
  })
</script>

gsap基础一[from,to,fromTo]-LMLPHP

api 文档

https://greensock.com/docs/

入门学习

from 补帧动画

定义值的起始位置,然后将其动画化为当前状态

参数

  • target

  • object

随机加载动画

<style>
    body {
      margin: 0;
      height: 100vh;
      display: flex;
      flex-direction: column;
    }
    .box{
      height: 50vh;
      display: flex;
      justify-content: center;
      align-items: center;
      gap:20px
    }
    .circle{
      width: 100px;
      height: 100px;
      background-color: firebrick;
      border-radius: 50%;
    }
  </style>
<div class="box">
  <div class="circle"></div>
  <div class="circle"></div>
  <div class="circle"></div>
  <div class="circle"></div>
</div>
<script>
  gsap.from('.circle',{
    duration:1,
    y:'random(-200,200)',
    stagger:.25
  })
</script>

gsap基础一[from,to,fromTo]-LMLPHP

stagger

配置数据

GSAP					CSS
x: 100					transform: translateX(100px)
y: 100					transform: translateY(100px)
rotation: 360			 transform: rotate(360deg)
rotationX: 360			transform: rotateX(360deg)
rotationY: 360			transform: rotateY(360deg)
skewX: 45				transform: skewX(45deg)
skewY: 45				transform: skewY(45deg)
scale: 2				transform: scale(2, 2)
scaleX: 2				transform: scaleX(2)
scaleY: 2				transform: scaleY(2)
xPercent: -50			transform: translateX(-50%)
yPercent: -50			transform: translateY(-50%)
delay     				延迟
ease                     速度
id                       适用于 GSDevTools ,学习这个再了解
invalidateOnRefresh: true   实例后立即执行,默认false
paused                    true 创建动画后暂停
repeat                     重复次数
repeatDelay				两次重复之间等待的时间
repeatRefresh         	重复刷新
reversed			  动画反转
startAt        			定义任何属性的起始值,这个有时候不好理解,就是执行动画的时候设置自身的属性
	例如  {x: -100, opacity: 0}
yoyo                 如果为true,则其他所有repeat迭代将以相反的方向运行,以便补间看起来像是来回走动。 [开始] 1-2-3-3-2-1-1-2-3 [结束]
yoyoEase   可以yoyo: true在您定义any时自动设置yoyoEase   设置速度

keyframes: [{x:100, duration:1}, {y:100, duration:0.5}]
关键帧动画
  • 驼峰化

多个值可以编写函数的形式

 y: function(index, target, targets) { // 类似于官网有50个dom
        return index * 50;
    },

random 随机数

random([1,2,3,4]) 随机中一个数
random(min,max)
random(min,max,中位数)  在min和max选一个数,四舍五入接近最接近这个数
    这种方式应该适合范围在0-1之间

回调函数

  • onComplete:动画完成时调用。

  • onStart:动画开始时调用

  • onUpdate:每次动画更新时调用(在动画处于活动状态时在每个帧上)。

  • onRepeat:每次动画重复时调用一次。

  • onReverseComplete:动画反转后再次到达其起点时调用。

回调参数

参数必须是数组的形式

    onCompleteParams: ['1212', 'aaa'],
    onComplete(...params){
      console.log(params);// ['1212', 'aaa']
    },
    onStartParams:['aaa'],
    onStart(...params){
      console.log(params); //['aaa']
    }

在函数的后面加上Params

函数其实可以写在外面

onCompleteParams: ['1212', 'aaa'],
onComplete:add
// 这样拿到参数
function add(...params){

}

关于动画的执行

var tween = gsap.to("#logo", {duration: 1, x: 100});

// 播放
tween.play();
// 从2s后开始播放,这个回调函数都会执行
tween.play(2);
//跳到动画中恰好2秒并开始播放,如果里面有 onStart的回调不会执行
tween.play(2,false);

// 暂停
tween.pause();
同理
// 跳到动画恰好2s
tween.pause(2);
// 不但印制事件的执行
tween.pause(2,false);

// 自杀
kill()
如果以后还使用动画别使用这个

// 已暂停
// 拿到暂停的状态
var paused = myAnimation.paused();

// true就是切换到 pause()的状态
myAnimation.paused( true );

//toggle 状态
myAnimation.paused( !myAnimation.paused() )

// 进度
0-1 之间
// 获取当前进度
var progress = myTween.progress();

// 进度设置 1/4  然后播放
myTween.progress( 0.25 ).play();
如果设置了重复,进度会有所不同

//重复
// 获取当前的重复次数
var progress = myTween.repeat();

// 设置重复次数,要无限重复就设置-1
myTween.repeat( 2 );

// 重新开始
myAnimation.restart()

// 恢复播放但不改变方向
// 刚开始没理解,就是有记录当前状态的意思
// 当我播放到一般的时候,点击反向的时候,再暂停,应该点击恢复播放,因为恢复播放记录状态
my.resume()

// 反向
my.reverse()
参数: boolean 是否向后播放动画
// 记录反向状态
切换反向播放
function clickAdd1() {
    // 获取方向的状态
    let obj = t1.reversed()
    t1.reversed(!obj)
  }

// 跳转特定时间
seek(2) //跳转到2s

to

定义最终的值,就是由当前=>最终的

fromTo

定义开始和结束的状态

不能把时间,延迟等放在第二个参数,应该放在第三个参数
                      // 设置开始的状态 ,设置结束的状态
  gsap.fromTo(".aaa",
              {x:0,y:200,},{x:500,y:400,duration:4,delay:2,ease:"strong.inOut"});

剩下的跟from一样就不说啦

to from fromTo

个人理解三者关系

如果我们的页面是开发好的,我感觉应该用from 就是设置初始的状态回到当前的状态

如果我们想设置当前=>最终的状态, to

如果我们即想设置之前的状态,又设置最终的动画,fromTo

虽然说的有点绕,但是大概是这样的

12-03 04:08