什么是GSAP?
GSAP,全称GreenSock Animation Platform,是一个高性能的JavaScript动画库。它可以让你在网页上轻松创建高效、流畅的动画效果。GSAP的优势在于它的简洁性、灵活性和强大的功能,可以兼容各种浏览器,并且有丰富的文档和示例。
https://gsap.com/
案例展示
我们将实现一个简单的网页动画效果,包括图片的缩放、文本的淡入淡出和按钮的滑动效果。下面是我们最终的效果视频展示:
学习目标
通过本案例,你将能学到以下内容:
- 如何使用GSAP库创建和控制动画。
- 了解
fromTo
方法的用法及其在动画中的应用。 - 学习如何使用时间线(timeline)管理多个动画效果,控制动画的顺序和时间点。
- 掌握不同缓动效果(ease)的应用,使动画更加流畅和自然。
- 学习如何为文本、图片、按钮等不同元素添加动画效果,提高网页的视觉吸引力和用户体验。
- 理解如何使用GSAP的
stagger
属性为一组元素创建错开的动画效果。
功能描述
这个案例的主要功能包括:
- 图片的缩放和圆角过渡效果:页面加载时,图片从放大状态(scale为1.3)缩小到正常大小(scale为1),同时圆角从0增加到2rem,整个过程持续2.5秒,并且具有弹性过渡效果,看起来像是图片从屏幕中间弹出。
- 文本从不同方向滑入并且透明度变化:六个文本元素分别从屏幕的不同方向滑入,同时透明度从0.5逐渐变为1。具体而言,第一个和第四个文本从右侧滑入,第三个和第六个文本从左侧滑入,第二个和第五个文本从下方滑入。这些动画稍微重叠,使得整体效果更加连贯。
- 按钮从底部滑入并且透明度变化:按钮从底部向上滑入,同时透明度从0逐渐变为1,这个动画在文本动画之后立即开始,形成一个自然的过渡效果。
- 顶部LOGO文字的动画效果:页面加载时,LOGO文本的每个字母从下方向上滑入,同时透明度逐渐变为1,整个过程具有弹性过渡效果,字母之间的动画有0.05秒的间隔,使得LOGO看起来像是逐字母弹跳出现。
源码解析
HTML结构
代码语言:javascript复制<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<title>Text Animations</title>
<link rel="preconnect" href="https://fonts.googleapis.com"/>
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin/>
<link
href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500&display=swap"
rel="stylesheet"
/>
<link rel="stylesheet" href="style.css"/>
</head>
<body>
<nav>
<h1 class="logo">Frontend-GSAP</h1>
</nav>
<div class="hero-section">
<img src="hero.jpg" class="hero-img" alt="">
<div class="cta">
<div class="cta-text">
<h2><span class="cta1">One</span></h2>
<h2><span class="cta2">stop</span></h2>
<h2><span class="cta3">shop</span></h2>
</div>
<div class="cta-text">
<h2><span class="cta4">to</span></h2>
<h2><span class="cta5">perfect</span></h2>
<h2><span class="cta6">skin.</span></h2>
</div>
<button class="cta-btn">Explore</button>
</div>
</div>
<script src="gsap.min.js"></script>
<script src="app.js"></script>
</body>
</html>
CSS代码
代码语言:javascript复制* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: "Poppins", sans-serif;
}
nav {
min-height: 10vh;
display: flex;
justify-content: center;
align-items: center;
}
.logo {
font-size: 1rem;
color: rgb(33, 33, 33);
overflow: hidden;
}
.hero-section {
height: 80vh;
margin: 0 10%;
}
.hero-section img {
width: 100%;
height: 100%;
object-fit: cover;
}
.cta {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
color: white;
display: flex;
flex-direction: column;
align-items: center;
}
.cta-text {
display: flex;
font-size: 2rem;
}
.cta-text h2 {
overflow: hidden;
}
.cta-text span {
padding: 0 0.4rem;
display: block;
text-shadow: rgba(0,0,0,0.4) 0 0 20px;
}
.cta-btn{
margin: 1rem;
padding: 0.5rem 2rem;
background: white;
border-radius: 0.3rem;
color: rgba(33,33,33);
border: none;
font-size: 0.7rem;
}
JS代码
接下来我们将详细解析JS部分的代码,并对相关的GSAP API进行详细解释。
代码语言:javascript复制const tl = gsap.timeline({
defaults: { duration: 0.75, ease: "Power3.easeOut" },
});
这里我们创建了一个GSAP的时间线(timeline)实例,tl
。timeline
允许我们将多个动画串联在一起,按顺序或并行播放。defaults
属性设置了所有动画的默认参数,duration
设为0.75秒,ease
设为“Power3.easeOut”,即动画以缓慢的速度开始,然后逐渐加速并缓慢结束。