Skip to content

基础用法

基础命令

  • 第一个元素 就是要动画的元素

  • 第二个元素 是动画的属性

js
gsap.to(".box", { x: 100, duration: 1 });
bash

这句话的意思就是 gsap 把这个 class box 的元素移动到 x 轴的 100px 的位置,动画持续时间为 1

如果这个页面里面有很多个 class box 的元素.那么会一起移动

图片二

注意

记忆法则 三点 1. 方法 2 元素 3 动画属性

常用的基础方法

to

就是把默认的移动到指定的位置

js
gsap.to(".box", { x: 100, duration: 1 });

from

就是从指定的位置移动到默认的位置

js
gsap.from(".box", { x: 100, duration: 1 });

这就表示从 100 px 移动到默认的位置

fromTo

就是规定两个点.从一个点移动到另外一个点,这样他默认位置就不用管了

js
const gsapbox1move = () => {
  gsap.fromTo(gsapbox1.value, { x: 200, duration: 1 }, { x: 400, duration: 1 });
};

set

set 就是立刻马上改变元素的位置,哪怕写了 duration 也不行

js
const gsapbox1move = () => {
  gsap.set(gsapbox1.value, { x: 400, duration: 1 });
};

常用的元素选择器

ID 或者 CLASS

js
gsap.to(".box", { x: 200 });
gsap.to("#box", { x: 200 });

属性选择器

找到 session 下面 class 名叫 box 的元素

js
gsap.to("section > .box", { x: 200 });

通过 js

js
let box = document.querySelector(".box");
gsap.to(box, { x: 200 });

多个元素

js
let square = document.querySelector(".square");
let circle = document.querySelector(".circle");

gsap.to([square, circle], { x: 200 });

常用的动画属性

比如 background,onComplete,或者 repeat 等等

js
const gsapbox1move = () => {
  gsap.set(gsapbox1.value, {
    x: 400,
    duration: 1,
    background: "blue",
    onComplete: () => {
      console.log("动画完成了");
    },
  });
};
bash

GSAP 几乎可以为任何东西制作动画,没有预先确定的列表。这包括 CSS 属性、自定义对象属性,甚至 CSS 变量和复杂字符串!

最常见的动画属性是 transforms opacity。

举例如下

GSAP等效的 CSS
x:100transform:translateX(100px)
y:100transform:translateY(100px)
xPercent:50transform:translateX(50%)
yPercent:50transform:translateY(50%)
scale:2transform:scale(2)
scaleX:2transform:scaleX(2)
scaleY:2transform:scaleY(2)
rotation:90transform:rotate(90deg)
skew:40transform:skew(40deg)
skewX:45transform:skewX(45deg)
skewY:45transform:skewY(45deg)
opacity:0opacity:0
backgroundColor:"red"background-color:red
duration:1 (单位秒) 动画持续时间animation-duration:1s
delay:1 (单位秒)延迟animation-delay:1s
repeat:-1 (无限流)animation-iteration-count:infinite
repeat:2 (重复次数)animation-iteration-count:2
yoyo:true (悠悠球)说白了类似溜溜球,每隔时间重复一次,期间沿着相反的方向运行(默认值为:false)
ease:缓解控制动画期间的变化率,如运动个性或者缓动
onComplete在动画完成的时候运行的函数
onReverseComplete在动画反向完成的时候运行的函数
onStart在动画开始的时候运行的函数
onUpdate在动画更新的时候运行的函数
onRepeat在动画重复的时候运行的函数
paused设置动画是否暂停,默认值为:false
restart重新开始动画
play开始向前播放,可以选择从特定时间开始播放(默认情况下,从播放头当前所在的位置开始播放)
kill杀死这个时间轴了.怎么点击动画也不会动了,点击 restart 也不行
progress设置动画的进度,默认值为:0
reversed设置动画是否反向播放,默认值为:false
yoyo设置动画是否在重复时反向播放,默认值为:false repeat 通常与 Yoyo 配对,以便在每个循环中反转方向。

属性值还可以计算

bash
x:200,
x:"+=200",
x:"40vw",
x:()=>window.innerWidth/2,

方法汇总

html
<template>
  <div class="page">
    <div class="gsapbox1" ref="gsapbox1">{{ message }}</div>
    <button @click="pause">点击暂停</button>
    <button @click="start">点击继续</button>
    <button @click="restart">点击重新开始</button>
    <button @click="stop">点击停止</button>
  </div>
</template>

<script setup>
  import { ref, onMounted } from "vue";

  import { gsap } from "gsap";

  const message = ref("首页");

  const gsapbox1 = ref(null);

  const tween = ref(null);

  // 停止 点击了停止 就再不会有继续开启了
  const stop = () => {
    tween.value.kill();
  };

  // 暂停
  const pause = () => {
    tween.value.pause();
  };

  // 开始
  const start = () => {
    console.log(tween.value);
    tween.value.play(0.9);
  };

  // 重新开始
  const restart = () => {
    console.log(tween.value);
    // 重新开始
    tween.value.restart();
  };

  onMounted(() => {
    console.log("开始吧");
    // 运动开始
    gsapbox1move();
  });

  // gsapbox1运动
  const gsapbox1move = () => {
    tween.value = gsap.to(gsapbox1.value, {
      x: "+=200",
      duration: 1,
      background: "blue",
      repeat: -1, // 重复次数
      yoyo: true, // 反向运动
      onComplete: () => {
        console.log("动画完成了");
      },
      onStart: () => {
        console.log("动画开始了");
        tween.value.progress(0.5); // 设置动画的开始进度
      },
      onUpdate: () => {
        // 获取动画的进度
        console.log(tween.value.progress() * 100);
      },
      onRepeat: () => {
        console.log("动画重复了");
      },
    });
  };
</script>

<style lang="scss" scoped>
  .page {
    .gsapbox1 {
      width: 100px;
      height: 100px;
      background: red;
    }
  }
</style>

其他

如果不确定的话可以试试驼峰式命名例如

bash
background-color 变为 backgroundColor