用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/chuanyue98/prompt-gallery --skill lottie-lottie-animation-integration命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| 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([, ], )
} {
lottieRef..(, )
}
}, [isLiked])
(
)
}
在开发过程中,优先考虑在以下场景引入 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 定义。