GSAP动画魔法:解锁网页设计的无限创意与动感

GSAP(GreenSock Animation Platform)是一个强大的JavaScript动画库,用于在Web应用程序中创建高性能和复杂的动画效果,其提供了一套丰富的API和工具,使开发者能够轻松地创建流畅、交互式的动画,涵盖了从简单的CSS属性动画到复杂的序列动画和时间轴控制等各种需求,超过1100万个网站中包括50%的获奖网站其主要品牌都使用GSAP。

目录

初识GSAP

GSAP核心概念 

GSAP常用方法

最后总结


初识GSAP

GSAP作为JS的专业动画库,自flash时代起就不断发展,至今已成为一个成熟且广泛应用的动画解决方案,因其具备以下优点而使其作为经典的动画库被大家广泛使用:

1)跨浏览器和跨平台:GSAP提供的动画效果能够兼容各种浏览器和设备,确保动画在不同环境下保持一致性。

2)高性能:GSAP以其快速和流畅的动画效果著称,避免了常见的卡顿和闪烁问题,为用户带来极佳的视觉体验。

3)丰富的属性和方法:GSAP提供了丰富的属性和方法,可用于创建复杂的动画效果,如位置移动、缩放、旋转、透明度变化等。

4)强大的可定制性:GSAP允许用户根据项目需求进行个性化的动画设计,包括动画时间、延迟、重复次数、缓动函数等。

在 官方文档 中详细记载了GSAP应用的基础示例,给开发者提供了很大的便利去理解使用GSAP:

对于GSAP中存在着常用的属性供我们进行选择,其本质上还是借助了css进行处理,这里简单说一下:

GSAPCSS解释
x: 100transform: translateX(100px)水平移动
y: 100transform: translateY(100px)垂直移动
xPercent: -50transform: translateX(-50%)水平移动(元素宽度的百分比)
yPercent: -50transform: translateY(-50%)垂直移动(元素宽度的百分比)
rotation: 360

transform: rotate(360deg)

旋转(度)
scale: 2transform: scale(2, 2)增大或减小大小
delay: 1动画延迟时间 单位是秒
duration: 3动画持续时间 单位是秒
repeat动画重复多少次

yoyo

悠悠球默认: false;true则表示补间每隔一次重复将朝相反方向运行。
ease运动曲线
stagger交错,每个目标的动画开始之间的时间(秒为单位)

终端执行如下命令进行安装即可:(目前博主安装的最新版本是:^3.12.5)

npm install gsap

因为GSAP并不是完全免费的,有部分功能需要收费才能使用,当然免费版本基本上也已经满足我们日常开发的动画需求了:、

GSAP核心概念 

作为经典动画库,GSAP的核心概念主要有两种:Tween(补间动画) 和 Tmeline(时间轴):

<1>Tween(补间动画):Tween是GSAP的核心概念,指在一段时间内逐渐改变元素的属性值,从而实现平滑的动画效果,其主要分为下面四类:

gsap.to():从元素的起始值开始,动画到我们指定的结束值

gsap.from():反过来。我们指定起始值,动画到结束值

gsap.fromTo():我们定义起始值和结束值。

sap.set():立即设置属性(无动画)

ok,这里我们通过一段代码进行一个简单是示范:

<template><div class="box" ref="box"></div>
</template><script lang="ts" setup>
import { ref, onMounted } from 'vue';
import { gsap } from 'gsap';let box = ref(null);
onMounted(() => {gsap.to(box.value, { x: 500, y: 500,  duration: 5, // 持续时间repeat: -1, // 如果是 -1,则无限循环yoyo: true, // 如果是 true,则来回循环delay: 1, // 延迟时间, 1s之后开始执行动画ease: 'power4.inOut', // 缓动方式opacity: 0, // 透明度})
})
</script><style>
* {margin: 0;padding: 0;
}
.box {width: 100px;height: 100px;background: #008c8c;border-radius: 50%;}
</style>

页面最终呈现的效果如下所示:

<2>Tmeline(时间线):GSAP提供了Timeline功能,可以方便地控制多个动画的播放顺序和时间,使得动画序列的管理变得更加简单。那什么是时间线呢?时间线是创建易于调整、有弹性的动画序列的关键,将补间添加到时间线时,默认情况下,补间将按添加顺序依次播放。简单理解:时间线可以让多组动画编排动作,从而控制整个序列,这里通过一段代码进行简单的示例:

<template><div class="box1" ref="box1"></div><div class="box2" ref="box2"></div><div class="box3" ref="box3"></div>
</template><script lang="ts" setup>
import { ref, onMounted } from 'vue';
import { gsap } from 'gsap';let box1 = ref(null);
let box2 = ref(null);
let box3 = ref(null);
onMounted(() => {// 创建时间线const timeline = gsap.timeline()timeline.to(box1.value, { x: 500, duration: 1 })timeline.to(box2.value, { y: 300, duration: 2 })timeline.to(box3.value, { y: 100, duration: 1 })
})
</script>

效果和我们设置的时间线一样,只有上一个动画执行完毕之后才会执行下面的动画:

<template><div class="box1" ref="box1"></div><div class="box2" ref="box2"></div><div class="box3" ref="box3"></div>
</template><script lang="ts" setup>
import { ref, onMounted } from 'vue';
import { gsap } from 'gsap';let box1 = ref(null);
let box2 = ref(null);
let box3 = ref(null);
onMounted(() => {// 创建时间线const timeline = gsap.timeline()timeline.to(box1.value, { x: 500, duration: 1 })timeline.to(box2.value, { y: 300, duration: 2 })timeline.to(box3.value, { y: 100, duration: 1 })
})
</script>

当然我们也可以指定一个参数来构建动画时机时间的序列,简单的理解就是多组动画之间的执行时机,如下代码所示:

<template><div class="box1" ref="box1"></div><div class="box2" ref="box2"></div><div class="box3" ref="box3"></div>
</template><script lang="ts" setup>
import { ref, onMounted } from 'vue';
import { gsap } from 'gsap';let box1 = ref(null);
let box2 = ref(null);
let box3 = ref(null);
onMounted(() => {// 创建时间线const timeline = gsap.timeline()// 第三个参数代表时间线的开始时间timeline.to(box1.value, { x: 500, duration: 1 }, 3)// 第三个参数代表是和上一条动画一起运动timeline.to(box2.value, { y: 300, duration: 2 }, "<")// 第三个参数代表是上一个动画执行完毕之后,延迟1秒后开始,如果是-=1,则是上一个动画结束前1秒开始执行timeline.to(box3.value, { y: 100, duration: 1 }, "+=1")
})
</script>

最终呈现的效果如下所示:

GSAP常用方法

GSAP有许多常用的方法及其插件,这里我就拿比较常见的滚动插件ScrollTrigger进行举例:

以下是 ScrollTrigger 常用的属性,这里做一个简单的介绍:

属性取值说明
start数字 | 方位名词滚动触发器的起始滚动位置(数字,以像素为单位)
end数字 | 方位名词滚动触发器的起始滚动位置(数字,以像素为单位)
triggerElement | undefined触发器元素
animationTween | Timeline | undefined与滚动触发器实例关联的补间或时间线
scrub布尔值 | 数字true:动画的进度直接链接到滚动触发器进度
toggleClass字符串 | 对象向一(多)个元素添加/删除类
markerstrue开启标注功能
scrollerElement | window与滚动触发器关联·的滚动器元素,默认就是窗口
pinElement是否是固定元素。pin: true自身元素;pin: 'xxx'指定元素

这里通过代码进行一个简单的示例,如下所示:

<template><div class="box" ref="box">小圆</div>
</template><script lang="ts" setup>
import { ref, onMounted } from 'vue';
import { gsap } from 'gsap';
import { ScrollTrigger } from "gsap/ScrollTrigger";
gsap.registerPlugin(ScrollTrigger);let box = ref(null);
onMounted(() => {ScrollTrigger.create({// 触发元素 trigger: box.value,// 触发元素的位置开始start: 'top top',// 触发元素的位置结束end: '+=300',// 擦除 动画的进度和滚动条的进度链接到一起scrub: true,animation: gsap.to(box.value, {x: 200,y: 500,rotate: 180})})
})
</script>

最终呈现的效果如下所示:

最后总结

        GSAP是一个功能强大的JavaScript动画库,它提供了丰富的API和工具,帮助开发者在网页、应用和游戏中创建流畅、高性能的动画效果,GSAP以其易用性、跨平台兼容性和卓越的性能而广受好评,是许多前端开发者和设计师的首选动画解决方案。

        随着Web技术的不断发展和用户对网页体验要求的提高,GSAP将继续发挥其在动画领域的优势,为开发者提供更加高效、易用和强大的动画解决方案。同时,GSAP也将不断更新和完善其功能,以满足不断变化的市场需求和技术趋势。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/873858.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Shader入门精要总结(一)渲染流水线

渲染流水线的最终目的在于生成或者说是渲染一张二维纹理&#xff0c;即我们在电脑屏幕上看到的所有效果。 流水线主要分成三个阶段&#xff1a;应用阶段&#xff0c;几何阶段&#xff0c;光栅化阶段。&#xff08;概念&#xff09; 一.概述 1. 应用阶段 这个阶段由应用主导&am…

Debian Linux下rclone挂载谷歌云盘碰到的坑

可能是明月好久没有使用境外服务器挂载境外的云盘缘故吧,今天一个代维客户需要他的Linux服务器挂载谷歌云盘好进行云备份,本来是个很简单的事儿,没想到在rclone连接谷歌云盘的时候卡壳了,可是把明月给难为坏了,搜索到的简体中文教程倒是很多,但没有一个提到这个“坑”,最…

秋招突击——7/20——科大讯飞笔试相关——提前{图像叠加、世界杯积分问题、直角三角形个数}——正式{持续输出中位数,二次幂和三次幂的序列表示}

文章目录 引言提前图像叠加世界杯积分问题个人实现参考实现 直角三角形个数个人实现 正式等待时间期望值中位数输出个人实现 二次幂和三次幂序列个人实现 总结 引言 昨天用了牛客网做了一下作业帮的笔试&#xff0c;做的一塌糊涂&#xff0c;但是提醒我要练习使用牛客网的环境…

基于Matlab的数据可视化

基于Matlab的数据可视化 一、二维图形的绘制&#xff08;一&#xff09;基本图形函数&#xff08;1&#xff09;plot函数&#xff08;2&#xff09;fplot函数&#xff08;3&#xff09;其他坐标系的二维曲线 &#xff08;二&#xff09;图形属性设置&#xff08;1&#xff09;线…

Linux网络:应用层协议HTTP(一)

一、什么是HTTP协议 虽然我们说, 应用层协议是我们程序猿自己定的. 但实际上, 已经有大佬们定义了一些现成的, 又非常好用的应用层协议, 供我们直接参考使用. HTTP(超文本传输协议)就是其中之一。 在互联网世界中&#xff0c;HTTP&#xff08;HyperText Transfer Protocol&…

C#中的栈和队列

什么是栈 栈和队列是非常重要的两种数据结构,在软件设计中应用很多。栈和队列也是线性结构,线性表、栈和队列这三种数据结构的数据元素以及数据元素间的逻辑关系完全相同,差别是线性表的操作不受限制,而栈和队列的操作受到眼制。栈的操作只能在表的一端进行,队列的插入操作在表…

安卓篇-unidbg初步测试

前言:目前app的进度是c层的md5魔改 已经做好,又套了一层java层的加密。刚好可以再熟悉一下unidbg 最新版的app ,作为demo测试一下。 分析先看下app 的反编译的结果,很明显,源码很清晰 ,之前的混淆方式一点用没有。 然后跳过去 /* loaded from: classes4.dex */ public c…

FPGA实验5:4位加法计数器

实验目的及要求 掌握时钟信号、进程和BUFFER端口的运用&#xff1b;了解计数器的设计、仿真和硬件测试&#xff0c;进一步熟悉VHDL语句、语法及应用等。 实验原理 运用Quartus II 集成环境下的VHDL文本设计方法设计4位加法计数器&#xff0c;进行波形仿真和分析、引脚分配…

4 Java的基本程序设计结构(基本语法3)- 字符串、面向对象(进阶)

文章目录 前言一、java中的 究竟比较的是什么&#xff1f;二、字符串1 String&#xff08;1&#xff09;String的两种构造方式&#xff08;2&#xff09;字符数组转字符串、字节数组转字符串&#xff08;3&#xff09;字符串的 拼接&#xff08;4&#xff09;字符串的内存结构…

【Android面试八股文】荣耀面试算法题:输入一个N阶方阵(0<N<10),输出此方阵顺时针旋转M(0<=M<=10000)次后的方阵

文章目录 1. 算法题:输入一个N阶方阵(0<N<10),输出此方阵顺时针旋转M(0<=M<=10000)次后的方阵1.1 题目描述1.2 算法实现1.2.1 步骤说明:1.2.2 算法实现1.2.3 代码实现:1.2.4 程序说明:1.2.5 示例详细讲解如何将一个矩阵顺时针旋转90度1. 算法题:输入一个N阶方…

Spring -- 三层架构

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 今天你敲代码了吗 应用分层 介绍 在阿里的开发手册里,关于工程结构部分,定义的常见工程的应用分层结构 那么什么是应用分层呢? 应用分层是一种软件开发设计思想,他将应用程序分层N个层次.这N个层次分别负责各…

Oracle小白菜鸟从入门到精通教程

前言 Oracle公司&#xff08;甲骨文&#xff09;是全球最大的信息管理软件及服务供应商&#xff0c;成立于1977年&#xff0c;总部位于美国加州Redwood shore&#xff0c;面向全球开放oracle认证。Oracle开发的关系数据库产品因性能卓越而闻名&#xff0c;Oracle数据库产品为财…

Hi6274 反激式20瓦电源芯片

HI6274为高性能多模式 PWM 反激式20瓦电源芯片。HI6274较少的外围元器件、较低的系统成本可设计出高性能的"无Y"开关电源。HI6274提供了极为全面和性能优异的智能化保护功能&#xff0c;包括逐周期过流保护、过载保护、软启动、芯片过温保护、可编程输出过压保护功能…

【Langchain大语言模型开发教程】记忆

&#x1f517; LangChain for LLM Application Development - DeepLearning.AI 学习目标 1、Langchain的历史记忆 ConversationBufferMemory 2、基于窗口限制的临时记忆 ConversationBufferWindowMemory 3、基于Token数量的临时记忆 ConversationTokenBufferMemory 4、基于历史…

世界启动Ⅷ--AI视频制作-方案与创新

1.文本/图片生成视频顾名思义&#xff0c;就是输入一段文本描述/上传一张图片即可生成对应的视频。我们常见的Runway、Pika、NeverEnds、Pixverse、svd等都属于此类。比如runway的影视风格Pika的动漫风格NeverEnds的人像模特当然还有一些外延应用&#xff0c;例如最近比较火的阿…

《从C/C++到Java入门指南》- 17.命令行参数

命令行参数 一直写代码的童鞋可能留意到了&#xff0c;main函数中会传入一个String args[]的字符串数组。 这个数组由JVM接收用户输入并传给main函数。 import java.util.*; public class Main {public static void main(String[] args) {for (String arg : args) {System.out…

FLINK-运行架构

为什么要学习Flink运行架构&#xff1f; 虽然现在大厂的开发工具都非常高效、只需要进行参数配置、Flink-sql写业务逻辑&#xff0c;但是在资源配置逻辑优化上不可避免需要了解底层的组件配置。面试时可能也会被问到FLINK是如何进行资源分配、作业运行的等。 以下是在学习时记录…

R语言画散点图-饼图-折线图-柱状图-箱线图-直方图-等高线图-曲线图-热力图-雷达图-韦恩图(二D)

R语言画散点图-饼图-折线图-柱状图-箱线图-直方图-等高线图-曲线图-热力图-雷达图-韦恩图&#xff08;二D&#xff09; 散点图示例解析效果 饼图示例解析效果 折线图示例解析效果 柱状图示例解析效果 箱线图示例解析效果 直方图示例解析效果 等高线图使用filled.contour函数示例…

Python学习—open函数,json与pickle知识点,Os模块详解

目录 1. Open函数 2.json与pickle模块 json模块 1. json.dumps() 2. json.dump() 3. json.loads() 4. json.load() pickle 模块 1. pickle.dumps() 2. pickle.dump() 3. pickle.loads() 4. pickle.load() 3.Os模块 1. Open函数 在Python中&#xff0c;open() 函数…

Jenkins+Maven+Gitlab+Tomcat自动化构建打包+部署

目录 环境准备 导入项目包 配置jenkins 构建项目 配置项目上线 修改项目代码测试 环境准备 本实操项目环境基于https://blog.csdn.net/Lzcsfg/article/details/140359830 首先在node01主机中操作&#xff0c;本次操作需要java8的版本&#xff0c;将之前安装的java17卸…