Skip to content

ScrollTrigger

介绍

ScrollTrigger 它可以帮助你在滚动页面时触发特定的动画或效果。这个插件基于 GSAP(GreenSock Animation Platform)库,因此你可以使用 GSAP 的强大功能来创建复杂的动画。

使用

引用

js
import gsap from "gsap";
import { ScrollTrigger } from "gsap/ScrollTrigger";

注册

js
gsap.registerPlugin(ScrollTrigger);

使用

html
<template>
  <div>
    <div style="width: 100%; height: 1000px; background: blue"></div>
    <div class="box black"></div>

    <div class="box red"></div>

    <div class="box blue"></div>

    <div class="box green"></div>
    <div style="width: 100%; height: 2000px; background: blue"></div>
  </div>
</template>

<script setup>
  /* eslint-disable */
  import gsap from "gsap";
  import { onMounted, ref } from "vue";
  import { ScrollTrigger } from "gsap/ScrollTrigger";
  const gsap1 = () => {
    gsap.registerPlugin(ScrollTrigger);
    const tl = gsap.timeline();
    tl.to(".red", {
      x: 800,
      rotattion: 360,
      // duration: 10,
      scrollTrigger: {
        // 开始触发的节点
        trigger: ".black",
        // 这里是开始触发的位置 // 因为滚动有两种 从下往上 和从上往下
        // 默认应该 scroll-start开始在底部 ,scroll-end 在头部
        // 第一个参数 就是针对black的位置 第二个参数是 针对滚动条的位置
        start: "50 50%",
        // 要是只写一个 滚动条的距离
        //start: 100,
        endTrigger: ".blue",
        end: "bottom 25%",
        //是否把动画连接到滚动条,这样外面写的duration就会失效,默认是false
        scrub: true,
        // 是否把元素固定
        // pin: true,
        markers: {
          startColor: "black",
          endColor: "red",
          fontSize: "20px",
          indent: 200,
        },
        // 往下滚动 进入滚动区域 onEnter 对应 onLeaveBack
        // 当start在scroll-start上部 触发onEnter 当start在scroll-state下面触发onLeaveback
        // 当end在scroll-end上部 触发onLeave 当end在scroll-end下部触发onEnterback
        onEnter: () => {
          console.log("enter");
          tl.play();
        },
        // 往上滚动 离开滚动区域
        onLeaveBack: () => {
          console.log("leaveBack");
          tl.pause();
        },
        // 往上滚动 进入滚动区域 onEnterBack对应onLeave
        onEnterBack: () => {
          console.log("enterBack");
          tl.play();
        },
        // 往下滚动 离开滚动区域
        onLeave: () => {
          console.log("leave");
          tl.pause();
        },
      },
    });
  };

  onMounted(() => {
    gsap1();
    // window.addEventListener("scroll", () => {
    //   console.log(document.documentElement.scrollTop);
    // });
  });
</script>

<style lang="scss" scoped>
  .box {
    width: 100px;
    height: 100px;
    margin-bottom: 150px;
  }
  .red {
    background-color: red;
  }
  .black {
    background-color: black;
  }
  .blue {
    background-color: blue;
  }
  .green {
    background-color: green;
  }
</style>