ワンクリックで
lottie-lottie-animation-integration
关于在 React 应用中使用 lottie-react 集成 Lottie 动画的指南
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
关于在 React 应用中使用 lottie-react 集成 Lottie 动画的指南
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
下载 Google Fonts Icons (Material Symbols) 的 SVG 图标。支持多种风格(Outlined, Rounded, Sharp)。
扫描并优化项目中的静态图片资源,将大图片转换为WebP格式
生成二维码,支持屏幕显示或保存为文件
使用当用户请求评审前端 PR 或需要对前端代码进行质量检查时。触发条件:用户要求代码审查、前端质量审计、多维度代码分析、需要通过 GitHub API 提交精准的行级修改建议和生成详尽的评审总结。症状:代码质量问题、架构合规性检查、错误处理审计、测试覆盖评估。
UI/UX design intelligence with searchable database
| name | Lottie 动画集成 (Lottie Animation Integration) |
| description | 关于在 React 应用中使用 lottie-react 集成 Lottie 动画的指南 |
本技能文档提供了一套在 React 应用中集成 Lottie 动画的标准工作流。涵盖了安装、资源管理以及使用 lottie-react 控制动画的最佳实践。
lottie-react (轻量、维护良好的 Hook 风格库).json (标准 Lottie 格式)在集成 Lottie 动画时,遵循以下优先级:
AI 手搓 (AI Hand-crafting): 对于简单的微交互(如箭头跳动、淡入淡出、缩放、简单的路径位移),强烈建议由 AI 直接编写 JSON 代码。
shapes 里的 path 和 ks(Transform)里的 k(Keyframes)来实现基础动效。外部资源引用 (Fallback Strategy): 对于复杂的角色动画、流畅的插画动效或复杂的粒子效果,如果 AI 难以手搓,应当:
lottie-react 兼容。在目标工作区/应用中安装库:
# 使用 Yarn (推荐)
yarn add lottie-react
# 使用 NPM
npm install lottie-react
将 JSON 动画文件放置在组件附近的专用 assets 目录或共享 assets 文件夹中。
示例: src/pages/FeatureName/assets/animation-name.json
适用于简单的循环动画(如加载转圈、背景特效):
import Lottie from 'lottie-react'
import animationData from './assets/animation.json'
const SimpleAnimation = () => {
return (
<Lottie
animationData={animationData}
loop={true}
style={{ width: 100, height: 100 }}
/>
)
}
对于需要响应用户交互(如点击点赞、切换开关)的动画,需要使用 lottieRef。
核心概念:
lottieRef.current.playSegments([start, end], true): 清除等待队列并播放指定片段。lottieRef.current.goToAndStop(frame, true): 跳转到指定帧并暂停。true 表示按帧数跳转(而非时间)。autoplay={false}: 对于交互式动画至关重要,防止加载时自动播放。实现模式:
import Lottie, { type LottieRefProps } from 'lottie-react'
import { useRef, useEffect } from 'react'
import heartAnimation from './assets/heart.json'
// 如果 TypeScript 在当前环境中无法解析具体类型,可临时使用 any
// const lottieRef = useRef<any>(null)
export const LikeButton = ({ isLiked }: { isLiked: boolean }) => {
const lottieRef = useRef<LottieRefProps>(null)
const isFirstMount = useRef(true)
useEffect(() => {
if (!lottieRef.current) return
// 初始状态设置 (INITIAL STATE SETUP)
if (isFirstMount.current) {
// 如果已点赞,停在结束帧(如:实心红心)
// 如果未点赞,停在起始帧(如:空心轮廓)
lottieRef.current.goToAndStop(isLiked ? 60 : 0, true)
isFirstMount.current = false
}
// 交互更新 (INTERACTION UPDATES)
else if (isLiked) {
// 播放“点赞”动画(如:从第0帧播到第60帧)
lottieRef.current.playSegments([0, 60], true)
} else {
// 播放“取消点赞”或直接重置
lottieRef.current.goToAndStop(0, true)
}
}, [isLiked])
return (
<div onClick={toggleLike}>
<Lottie
lottieRef={lottieRef}
animationData={heartAnimation}
loop={false}
autoplay={false} // 重要!
onDOMLoaded={() => {
// 使用 onDOMLoaded 作为双重保险,确保 DOM 准备好时状态正确
if (isLiked) lottieRef.current?.goToAndStop(60, true)
}}
/>
</div>
)
}
在开发过程中,优先考虑在以下场景引入 Lottie 动画以提升用户体验:
微交互 (Micro-interactions):
状态反馈 (Feedback & States):
引导与展示 (Onboarding & Display):
游戏化元素 (Gamification):
goToAndStop(10, true)) 无效,试着往前退 1-2 帧(如 goToAndStop(8, true))。onDOMLoaded 回调来强制设置初始帧,以防 useEffect 执行过早或 Ref 尚未绑定。filter: invert(1) 等手段临时改变 SVG 渲染的 Lottie 颜色。playSegments,不要等接口返回。保留 disabled 逻辑防止重复点击即可。loading 时不要用条件渲染 ({loading ? <Spin /> : <Lottie />}) 销毁组件,这会导致动画瞬间消失。应通过控制 CSS visibility 或 opacity 来显示/隐藏 Loading。fillStyle 为空: lottie-web 在 JSDOM 环境下操作 Canvas 会报错。lottie-react 组件:jest.mock('lottie-react', () => ({
__esModule: true,
default: () => <div data-testid="lottie-mock" />,
}))
如果 LottieRefProps 无法导出或找不到:
useRef<any>(null)。lottie-react 版本是最新的,并检查其 index.d.ts 定义。