非常强大的gsap动画
非常好用的动画库gsap
为啥要使用gsap
1. 非常方便的语法 比如下面例子(简单吧)
// 让 div 容器在一秒内水平移动 100 px to 去到哪 gasp.to('.item', { duration: 1, x: 100 }) // duration动画持续的时间
// from很好理解就是来自哪gsap.from('.item', { duration: 1, x: 100});
gsap.fromTo('.item', // 这个就是从哪到哪好理解吧
{
opacity: 0,
},
{
opacity: 0.8,
duration: 1,
ease: "elastic", // 动画曲线
},
);
2.涵盖面广 不同于一般的动画库这个动画库几乎能操作你能想到的大多元素(特别的健全)比如: 3D模型(可以看我的另一篇文章threejs就是那gsap来操作3D模型)、svg 、画布、css属性 ……
3.兼容性好 因为它是js动画 几乎能解决大多数浏览器兼容性
4.非常的灵活 几乎可以处理所有页面上可以通过JS进行改变的元素 对对于动画的操控可以非常高程度的自定义
5.非常好用的线性动画 (你还记得苹果官网或者 各大手机厂商的官网产品那种炫技的网站 根据滚轮来完成动画的每一帧的变化特别的酷炫)自己做过该线性动画知道这种每一帧都由滚轮触发 有多不好 做 ,但是gsap帮你封装好了直接用 就好了 (具体代码看下面案例)
6.速度快。GSAP专门优化了动画性能,使之实现和CSS一样的高性能动画效果
7.轻量与模块化。模块化与插件式的结构保持了核心引擎的轻量,TweenLite包非常小(基本上低于7kb)。GSAP提供了TweenLite, TimelineLite, TimelineMax 和 TweenMax不同功能的动画模块,你可以按需使用。
8..这个库是真的推荐花事件去好好看看文档的
基本使用
1. 下载npm install gsap
案例1切换组件的时候进行动画切换(下面可以是v-if 你可以换成路由切换啥的 )
<template>
<div>
<button @click="flag = !flag">点击切换</button>
// transition除了常见的class类写法还要函数写法 @enter 进入 @befor-enter 进入之前 @after-enter 进入之后
// @leave离开的时候 当然也有 离开后 离开前
<transition @enter="enterHandle" appear>
<div v-if="flag" class="box">11</div>
<div v-else class="box2">222</div>
</transition>
</div>
</template>
<script lang="ts" setup>
import { ref } from 'vue'
// 引入
import { gsap } from "gsap";
const flag = ref<boolean>(true)
const enterHandle = (el: Element): void => {
console.log('我在进来的时候触发');
gsap.fromTo(el, { // 就是在进入的时候从小变大
height: '0px',
width: '0px'
}, {
height: '200px',
width: '200px'
})
}
</script>
<style scoped>
.box,
.box2 {
width: 200px;
height: 200px;
background-color: pink;
}
.box2 {
background-color: skyblue;
}
</style>
案例2 滚动页面触发线性动画
1.引入
import { gsap } from 'gsap'
import { ScrollTrigger } from 'gsap/ScrollTrigger'
2.把滚动插件引入到gsap动画中
gsap.registerPlugin(ScrollTrigger)
3.然后你就可以定义动画了
// 从哪来的
gsap.from('.newsRight', {
// 页面滚动开始触发
scrollTrigger: {
// 目标
trigger: ".newsRight",
// 开始位置
// start: "top center",
// 结束位置
// 定住锚点位置
pin: ".box",
// end: "top 100px",
// 这个就是根据页面滚动而触发动画
scrub: true, // 0.5, 以秒计算
// 是否展示开始结束位置
// markers: true
},
duration: 2,
x: 300,
});
4.甚至你可以定义多个元素的线性动画
gsap.from('.tasks', {
// // 页面滚动开始触发
scrollTrigger: {
// // 目标
start: "top 100",
trigger: ".tasks",
pin: ".task-container",
scrub: true, // 0.5, 以秒计算
},
duration: 5,
// opacity: 0,
y: (index, target) => {
return index % 2 ? -310 : 1 // 自己瞎写的想要怎么动可以自己算一下 我这个盒子刚好能凑一块
},
x: (index, target) => {
return index < 4 ? 294 : -294 // 我这个刚好能把几个盒子怼在一起 大家想玩玩其他的可以自己算算
},
});
还能定义一些高级事件
let tl = gsap.timeline({
// 添加到整个时间线
scrollTrigger: {
trigger: ".container",
pin: true, // 在执行时固定触发器元素
start: "top top", // 当触发器的顶部碰到视口的顶部时
end: "+=500", // 在滚动 500 px后结束
scrub: 1, // 触发器1秒后跟上滚动条
snap: {
snapTo: "labels", // 捕捉时间线中最近的标签
duration: {min: 0.2, max: 3}, // 捕捉动画应至少为 0.2 秒,但不超过 3 秒(由速度决定)
delay: 0.2, // 从上次滚动事件开始等待 0.2 秒,然后再进行捕捉
ease: "power1.inOut" // 捕捉动画的过度时间(默认为“power3”)
}
}
});
// 向时间线添加动画和标签
tl.addLabel("start")
.from(".box p", {scale: 0.3, rotation:45, autoAlpha: 0})
.addLabel("color")
.from(".box", {backgroundColor: "#28a92b"})
.addLabel("spin")
.to(".box", {rotation: 360})
.addLabel("end");
强烈 推荐去官网看看那些官网的demo才能体会到这个库的强大
如果你近期想要做一个炫技网站 记得这个库 绝对值


浙公网安备 33010602011771号