CSS 与 JavaScript 动画完全指南
从基础动画到高级动效设计、性能优化、动画资源利用、项目实战与设计思维,全方位掌握现代 Web 动画开发。
一、什么是前端动画
前端动画(Web Animation)是通过 CSS、JavaScript、Canvas、SVG、WebGL 等技术,让网页元素产生动态变化的一种视觉表现方式。
动画不仅仅是"好看",它本质上是:
- 提升用户体验(UX)
- 提高页面交互反馈
- 引导用户视线
- 增强产品高级感
- 提高页面层次感
- 提升品牌辨识度
例如:
- 按钮 Hover 动效
- 页面切换动画
- Loading 动画
- 卡片展开动画
- 滚动视差动画
- 数据图表动画
- 3D 场景动画
- SVG 路径动画
- 粒子动画
二、CSS 动画详解
CSS 动画适用于:
- UI 微交互
- 页面过渡
- 简单交互动效
- 高性能动画
- Hover 动画
- Loading 动画
CSS 动画核心有两种:
| 动画方式 | 说明 |
|---|---|
| transition | 过渡动画 |
| animation + keyframes | 关键帧动画 |
三、transition 过渡动画
1、基础语法
css
.box {
width: 100px;
height: 100px;
background: #409eff;
transition: all 0.3s ease;
}
.box:hover {
transform: scale(1.1);
}
2、transition 参数
css
transition: 属性 时长 缓动 延迟;
例如:
css
transition: transform 0.5s ease 0s;
| 参数 | 说明 |
|---|---|
| 属性 | 哪个属性动画 |
| 时长 | 动画时间 |
| ease | 缓动函数 |
| delay | 延迟 |
3、常见缓动函数
| 缓动 | 效果 |
|---|---|
| linear | 匀速 |
| ease | 默认 |
| ease-in | 慢进 |
| ease-out | 慢出 |
| ease-in-out | 两端慢 |
| cubic-bezier | 贝塞尔曲线 |
高级项目中:
css
transition: all 0.5s cubic-bezier(0.22, 1, 0.36, 1);
会更高级、更丝滑。
四、transform 核心动画
现代高级动画核心就是 transform。
为什么?
因为 transform:
- 不触发重排
- GPU 加速
- 性能极高
- 移动端流畅
1、位移
css
transform: translateX(100px);
transform: translateY(100px);
2、缩放
css
transform: scale(1.2);
3、旋转
css
transform: rotate(45deg);
4、倾斜
css
transform: skew(10deg);
5、3D 动画
css
transform: rotateY(180deg);
配合:
css
perspective: 1000px;
transform-style: preserve-3d;
五、CSS Keyframes 动画
1、基础语法
css
@keyframes move {
0% {
transform: translateX(0);
}
100% {
transform: translateX(300px);
}
}
.box {
animation: move 2s ease infinite;
}
2、animation 参数
css
animation: 名称 时长 缓动 延迟 次数 方向 填充模式;
3、无限循环
css
animation-iteration-count: infinite;
4、往返动画
css
animation-direction: alternate;
5、暂停动画
css
animation-play-state: paused;
六、高级 CSS 动画案例
1、按钮呼吸动画
css
@keyframes breathing {
0% {
transform: scale(1);
box-shadow: 0 0 0 rgba(64,158,255,0.5);
}
50% {
transform: scale(1.05);
box-shadow: 0 0 20px rgba(64,158,255,0.8);
}
100% {
transform: scale(1);
box-shadow: 0 0 0 rgba(64,158,255,0.5);
}
}
.btn {
animation: breathing 2s infinite;
}
2、卡片 Hover 高级动效
css
.card {
transition: all 0.4s cubic-bezier(0.22, 1, 0.36, 1);
}
.card:hover {
transform: translateY(-10px) scale(1.02);
box-shadow: 0 20px 40px rgba(0,0,0,0.15);
}
3、玻璃拟态动画
css
.glass {
backdrop-filter: blur(20px);
background: rgba(255,255,255,0.1);
}
七、JavaScript 动画详解
JS 动画适用于:
- 复杂交互
- 游戏
- 滚动动画
- SVG 动画
- Canvas 动画
- 粒子系统
- 数据可视化
- 物理动画
- 时间轴动画
- 3D 场景动画
CSS 动画更适合:
- 简单 UI 动效
- Hover
- 过渡动画
JS 动画更适合:
- 高级交互
- 多元素联动
- 动态计算
- 用户实时控制
- 复杂场景
八、JavaScript 动画实现方式
| 方式 | 推荐度 | 说明 |
|---|---|---|
| setInterval | ❌ | 老旧方案 |
| setTimeout | ❌ | 不适合复杂动画 |
| requestAnimationFrame | ✅ | 现代标准 |
| GSAP | ✅✅✅ | 企业级动画 |
| Canvas | ✅ | 粒子动画 |
| WebGL | ✅ | 3D 动画 |
七、JavaScript 动画详解
JS 动画适用于:
- 复杂交互
- 游戏
- 滚动动画
- SVG 动画
- Canvas 动画
- 粒子系统
- 数据可视化
- 物理动画
八、requestAnimationFrame
现代 JS 动画核心。
为什么不用 setInterval
因为:
- 会掉帧
- 不同步屏幕刷新率
- 性能差
requestAnimationFrame:
- 浏览器自动优化
- 60FPS
- 更流畅
- 更省电
基础示例
javascript
const box = document.querySelector('.box')
let x = 0
function animate() {
x += 2
box.style.transform = `translateX(${x}px)`
requestAnimationFrame(animate)
}
animate()
十、时间控制动画
javascript
const box = document.querySelector('.box')
let start = null
function animate(timestamp) {
if (!start) start = timestamp
const progress = timestamp - start
box.style.transform = `translateX(${progress / 2}px)`
if (progress < 2000) {
requestAnimationFrame(animate)
}
}
requestAnimationFrame(animate)
说明:
- timestamp 是浏览器提供的高精度时间
- 动画更稳定
- 更适合复杂场景
十一、缓动函数 Easing
高级动画核心就是缓动。
如果动画只是线性移动:
会非常"假"。
真正高级动画:
- 有加速度
- 有减速度
- 有惯性
- 有物理感
缓动动画
javascript
function easeOutQuad(t) {
return t * (2 - t)
}
使用:
javascript
const progress = current / duration
const eased = easeOutQuad(progress)
十二、Tween 动画思想
现代动画核心思想:
Tween(补间动画)。
本质:
在两个状态之间自动计算。
GSAP、Anime.js 本质都属于 Tween 动画。
十三、Timeline 时间轴动画
高级动画核心:
Timeline(时间轴)。
适用于:
- 多元素联动
- 页面开场动画
- Banner 动画
- 官网动效
GSAP Timeline 示例
javascript
const tl = gsap.timeline()
tl.from('.title', {
y: 100,
opacity: 0,
duration: 1
})
.from('.desc', {
y: 50,
opacity: 0,
duration: 1
})
.from('.btn', {
scale: 0,
duration: 0.5
})
十四、滚动驱动动画
现代官网最核心技术之一。
滚动时:
- 元素出现
- 图片缩放
- 视频联动
- 文字位移
- 背景视差
ScrollTrigger 示例
javascript
gsap.to('.box', {
scrollTrigger: '.box',
x: 500,
duration: 2
})
十五、视差动画 Parallax
视差动画:
不同元素以不同速度移动。
产生空间层次感。
示例
javascript
window.addEventListener('scroll', () => {
const scrollY = window.scrollY
document.querySelector('.bg').style.transform =
`translateY(${scrollY * 0.5}px)`
})
十六、鼠标跟随动画
适合:
- 科技感官网
- 创意官网
- Banner 动画
示例
javascript
window.addEventListener('mousemove', e => {
const x = e.clientX
const y = e.clientY
document.querySelector('.ball').style.transform =
`translate(${x}px, ${y}px)`
})
十七、粒子动画
高级官网最常见效果之一。
适合:
- 科技风
- AI 官网
- 数据平台
- Banner 背景
实现方式:
- Canvas
- Three.js
- particles.js
- tsparticles
particles.js
官网:
GitHub:
tsparticles
官网:
GitHub:
十八、物理动画
高级动画会加入:
- 重力
- 弹性
- 惯性
- 碰撞
例如:
- 卡片弹跳
- 拖拽回弹
- 弹窗出现
弹性动画
javascript
gsap.to('.box', {
y: 0,
ease: 'bounce.out'
})
十九、Canvas 粒子动画思路
Canvas 高性能动画核心。
典型流程:
text
创建粒子
↓
更新位置
↓
清空画布
↓
重新绘制
↓
requestAnimationFrame循环
粒子动画简化示例
javascript
const particles = []
function animate() {
ctx.clearRect(0, 0, canvas.width, canvas.height)
particles.forEach(p => {
p.x += p.vx
p.y += p.vy
ctx.beginPath()
ctx.arc(p.x, p.y, 2, 0, Math.PI * 2)
ctx.fill()
})
requestAnimationFrame(animate)
}
二十、JavaScript 动画性能优化
1、避免频繁 DOM 操作
错误:
javascript
for (let i = 0; i < 1000; i++) {
element.style.left = i + 'px'
}
推荐:
javascript
element.style.transform = `translateX(${x}px)`
2、使用 transform
transform:
- GPU 加速
- 不触发回流
- 更流畅
3、动画节流
滚动动画必须节流。
否则会卡顿。
throttle 示例
javascript
function throttle(fn, delay) {
let timer = null
return function () {
if (timer) return
timer = setTimeout(() => {
fn.apply(this, arguments)
timer = null
}, delay)
}
}
九、滚动动画 Scroll Animation
1、监听滚动
javascript
window.addEventListener('scroll', () => {
console.log(window.scrollY)
})
2、进入视口动画
javascript
const observer = new IntersectionObserver(entries => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('show')
}
})
})
const items = document.querySelectorAll('.item')
items.forEach(item => {
observer.observe(item)
})
十、高级动画核心思维
真正高级的动画:
不是炫。
而是:
- 克制
- 合理
- 有层次
- 有节奏
- 有目的
十一、什么时候该使用动画
应该使用动画的场景
| 场景 | 作用 |
|---|---|
| 按钮 Hover | 增强反馈 |
| 页面切换 | 提升流畅度 |
| Loading | 减少等待焦虑 |
| 数据变化 | 提示用户 |
| 菜单展开 | 提升层次感 |
| 卡片浮动 | 增强高级感 |
| Banner | 引导视线 |
| 滚动动画 | 增强沉浸感 |
十二、不该滥用动画的场景
以下情况少用动画
- 后台管理系统
- 表单页面
- 高频操作区域
- 长列表页面
- 数据密集页面
- 企业 OA 系统
原因:
动画会影响:
- 操作效率
- 专注度
- 可读性
- 性能
十三、如何设计适合的动画
1、先确定页面风格
| 风格 | 动画特点 |
|---|---|
| 科技感 | 粒子、光效、渐变 |
| 商务风 | 稳重、克制 |
| 电商 | 活泼、反馈强 |
| 极简风 | 动画极少 |
| 游戏风 | 强动态 |
2、动画速度
推荐:
| 动画类型 | 时间 |
|---|---|
| Hover | 0.2~0.3s |
| 页面切换 | 0.4~0.7s |
| Loading | 1~2s |
| 弹窗 | 0.3~0.5s |
3、动画节奏
高级动画:
- 有缓冲
- 有惯性
- 有呼吸感
- 有空间感
不要:
- 生硬
- 速度过快
- 动画太多
十四、动画性能优化
1、优先使用 transform
不要:
css
left: 100px;
推荐:
css
transform: translateX(100px);
2、避免频繁操作 DOM
错误:
javascript
for (let i = 0; i < 1000; i++) {
dom.style.left = i + 'px'
}
3、使用 will-change
css
.box {
will-change: transform;
}
4、避免大量阴影动画
box-shadow 很耗性能。
移动端尤其明显。
十五、现代高级动画库推荐
1、GSAP(最强)
适合:
- 企业官网
- 高级动画
- 3D 动画
- SVG 动画
- 滚动动画
官方:
- 官网:https://gsap.com/
- 文档:https://gsap.com/docs/
- ScrollTrigger:https://gsap.com/docs/v3/Plugins/ScrollTrigger/
- 示例:https://codepen.io/GreenSock
- GitHub:https://github.com/greensock/GSAP
安装:
bash
npm install gsap
示例:
javascript
gsap.to('.box', {
x: 300,
duration: 2,
rotation: 360
})
2、Framer Motion(React)
官方:
- 官网:https://motion.dev/
- 文档:https://motion.dev/docs/react
- GitHub:https://github.com/motiondivision/motion
- 示例:https://examples.motion.dev/
适合:
- React 项目
- 页面过渡
- 高级 UI 动效
安装:
bash
npm install framer-motion
3、Anime.js
官方:
- 官网:https://animejs.com/
- 文档:https://animejs.com/documentation/
- GitHub:https://github.com/juliangarnier/anime
适合:
- 轻量动画
- SVG 动画
- 时间轴动画
安装:
bash
npm install animejs
4、Three.js
官方:
- 官网:https://threejs.org/
- 文档:https://threejs.org/docs/
- 示例:https://threejs.org/examples/
- GitHub:https://github.com/mrdoob/three.js
- 教程:https://threejs-journey.com/
适合:
- 3D 动画
- WebGL
- 元宇宙场景
- 粒子特效
安装:
bash
npm install three
5、Locomotive Scroll
高级官网常用滚动动画库。
资源:
- 官网:https://locomotivemtl.github.io/locomotive-scroll/
- GitHub:https://github.com/locomotivemtl/locomotive-scroll
6、Lenis
现代高性能平滑滚动方案。
资源:
十六、SVG 动画
SVG 是现代高级官网核心。
适合:
- Logo 动画
- 路径动画
- 图标动画
- 科技感动画
示例:
css
path {
stroke-dasharray: 1000;
stroke-dashoffset: 1000;
animation: draw 5s linear forwards;
}
@keyframes draw {
to {
stroke-dashoffset: 0;
}
}
十七、Canvas 动画
适合:
- 粒子系统
- 炫酷背景
- 游戏
- 数据可视化
示例:
javascript
const canvas = document.getElementById('canvas')
const ctx = canvas.getContext('2d')
ctx.fillStyle = 'red'
ctx.fillRect(50, 50, 100, 100)
十八、Lottie 动画
Lottie 是现代前端最常用动画方案之一。
优点:
- 超轻量
- 高质量
- AE 导出
- 跨平台
资源:
- 官网:https://lottiefiles.com/
- Web 播放器:https://github.com/airbnb/lottie-web
- 文档:https://airbnb.io/lottie/#/
- 动画库:https://lottiefiles.com/featured
- AE 插件:https://aescripts.com/bodymovin/
安装:
bash
npm install lottie-web
十九、动画资源网站推荐
UI 动画灵感
| 网站 | 说明 | 链接 |
|---|---|---|
| Dribbble | 动效灵感 | https://dribbble.com/ |
| Behance | 高级设计案例 | https://www.behance.net/ |
| Awwwards | 顶级官网动画 | https://www.awwwards.com/ |
| Godly | 高级网站合集 | https://godly.website/ |
| Land-book | Landing Page 灵感 | https://land-book.com/ |
| One Page Love | Landing Page 灵感 | https://onepagelove.com/ |
| Site Inspire | 网站设计灵感 | https://www.siteinspire.com/ |
动画资源
| 网站 | 说明 | 链接 |
|---|---|---|
| LottieFiles | Lottie 动画 | https://lottiefiles.com/ |
| Rive | 实时动画 | https://rive.app/ |
| Haikei | SVG 背景 | https://haikei.app/ |
| SVG Repo | SVG 图标 | https://www.svgrepo.com/ |
| Shape Divider | 波浪分割 | https://www.shapedivider.app/ |
| Blobmaker | Blob 生成器 | https://www.blobmaker.app/ |
| Get Waves | SVG 波浪 | https://getwaves.io/ |
| BGJar | SVG 背景生成 | https://bgjar.com/ |
| Cool Backgrounds | 背景生成器 | https://coolbackgrounds.io/ |
CSS 动画资源
| 网站 | 说明 | 链接 |
|---|---|---|
| Animate.css | CSS 动画库 | https://animate.style/ |
| Magic Animations | 动画合集 | https://www.minimamente.com/project/magic/ |
| Hover.css | Hover 动效 | https://ianlunn.github.io/Hover/ |
| Animista | CSS 动画生成器 | https://animista.net/ |
| CSS Loaders | Loading 动画 | https://css-loaders.com/ |
| Uiverse | UI 动效组件 | https://uiverse.io/ |
SVG 与图标资源
| 网站 | 说明 | 链接 |
|---|---|---|
| Iconify | 图标库 | https://iconify.design/ |
| Lucide | 现代图标库 | https://lucide.dev/ |
| Heroicons | Tailwind 图标 | https://heroicons.com/ |
| Font Awesome | 图标库 | https://fontawesome.com/ |
| Remix Icon | 图标资源 | https://remixicon.com/ |
Three.js 与 3D 学习资源
| 网站 | 说明 | 链接 |
|---|---|---|
| Three.js Docs | 官方文档 | https://threejs.org/docs/ |
| Three.js Examples | 官方示例 | https://threejs.org/examples/ |
| Three.js Journey | 高质量课程 | https://threejs-journey.com/ |
| ShaderToy | Shader 效果 | https://www.shadertoy.com/ |
| Spline | 在线 3D 设计 | https://spline.design/ |
GSAP 学习资源
| 网站 | 说明 | 链接 |
|---|---|---|
| GSAP Docs | 官方文档 | https://gsap.com/docs/ |
| GSAP Showcase | 动画案例 | https://gsap.com/showcase/ |
| GSAP CodePen | 示例代码 | https://codepen.io/GreenSock |
动画学习与教程网站
| 网站 | 说明 | 链接 |
|---|---|---|
| MDN Animation | CSS 动画文档 | https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_animations |
| MDN Transform | Transform 文档 | https://developer.mozilla.org/zh-CN/docs/Web/CSS/transform |
| MDN requestAnimationFrame | JS 动画文档 | https://developer.mozilla.org/zh-CN/docs/Web/API/window/requestAnimationFrame |
| CSS Tricks | CSS 动画技巧 | https://css-tricks.com/ |
| Codrops | 高级动画教程 | https://tympanus.net/codrops/ |
| Frontend.fyi | 前端高级教程 | https://www.frontend.fyi/ |
二十、企业项目动画设计思路
企业官网
推荐:
- Banner 缓慢动画
- 卡片 Hover
- 数字增长动画
- 滚动进入动画
- 视差动画
不要:
- 花里胡哨
- 高频闪烁
- 超长动画
后台管理系统
推荐:
- 微交互
- Loading
- Drawer 动画
- Dialog 动画
不要:
- 粒子背景
- 大型动画
- 页面乱飞
电商项目
推荐:
- 加入购物车动画
- Banner 动画
- 商品 Hover
- 数字动画
二十一、现代高级官网动画结构
现代高级官网:
通常由:
- SVG
- GSAP
- ScrollTrigger
- Three.js
- 粒子系统
- 渐变动画
- 视频背景
- 模糊玻璃拟态
组合而成。
二十二、如何提升自己的动画能力
第一阶段
学习:
- transition
- transform
- keyframes
目标:
会做基础 Hover 动效。
第二阶段
学习:
- requestAnimationFrame
- SVG 动画
- GSAP
目标:
会做高级官网动画。
第三阶段
学习:
- Three.js
- Shader
- WebGL
- 粒子系统
目标:
会做科技感 3D 官网。
二十三、动画面试常考题
1、transition 和 animation 区别
| transition | animation |
|---|---|
| 需要触发 | 自动执行 |
| 简单动画 | 复杂动画 |
| Hover 常用 | 连续动画 |
2、为什么 transform 性能高
因为:
- 不触发重排
- 不触发回流
- GPU 加速
3、requestAnimationFrame 优势
- 浏览器优化
- 更流畅
- 自动暂停
- 节能
4、什么是回流和重绘
回流:
布局改变。
重绘:
样式改变。
回流成本更高。
二十四、动画开发最佳实践
推荐
✅ 克制动画
✅ 有层次感
✅ 动画服务于内容
✅ 动画有反馈意义
✅ 统一动画节奏
不推荐
❌ 页面到处飞
❌ 高频闪烁
❌ 动画过长
❌ 动画抢内容注意力
❌ 所有元素都动
二十五、总结
真正高级的动画:
不是"炫技"。
而是:
- 自然
- 流畅
- 有节奏
- 有目的
- 不影响操作
- 提升用户体验
现代前端动画核心技术栈:
- CSS3
- JavaScript
- GSAP
- SVG
- Canvas
- Three.js
- Lottie
- Framer Motion
建议学习路线:
CSS 动画 → JS 动画 → GSAP → SVG → Canvas → Three.js
当你真正理解:
"动画是服务于内容"
你就已经进入高级前端动效设计阶段了。