更新记录
1.1.2(2026-02-25)
发布第一版
平台兼容性
uni-app(3.8.0)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| - | - | √ | - | √ | - | √ | - | - |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| √ | - | - | - | - | - | - | - | - | - | - | - |
<lui-animator />
全平台 Lottie 动画组件,支持文本/图片替换与元素点击。
Lottie 由 Airbnb 开源,可在应用中带来流畅的矢量动画。本组件在 微信小程序 使用 lottie-miniprogram + Canvas 2D 渲染,在 App / H5 使用 lottie-web + SVG 渲染。
渲染与替换策略
- 文本替换(全平台):通过
textMapprop 或replaceText()/replaceTexts()在加载前修改 JSON,仅改文字、保留原字体/颜色;或通过updateDocumentData()在domLoaded后运行时更新。 - 图片替换(全平台):通过
imageMapprop 或replaceImage()/replaceImages(),按 asset id/名称匹配;H5/App 内嵌 base64,小程序使用本地临时路径。 - 元素点击(仅 H5/App):通过
clickableIds指定可点击的 asset/图层 id,点击时触发elementClick事件。
快速开始
0. 安装依赖
App / H5:
npm install lottie-web
# 或
yarn add lottie-web
微信小程序:
npm install lottie-miniprogram
# 或
yarn add lottie-miniprogram
1. 引入组件并指定动画数据
<lui-animator :frames="lottieJsonData" />
2. 声明式文本/图片替换
<!-- 按图层名或文本内容替换文字,保留原样式 -->
<lui-animator
:frames="data"
:textMap="{ '24.4元': '99.9元', '用户昵称': '张三' }"
/>
<!-- 按 asset id 替换图片 -->
<lui-animator
:frames="data"
:imageMap="{ 'image_0': 'https://example.com/avatar.jpg' }"
/>
3. 元素点击(仅 H5/App)
<lui-animator
:frames="data"
:clickable-ids="['image_3']"
@elementClick="onElementClick"
/>
onElementClick({ id, event }) {
console.log('点击了元素:', id);
}
参数 (Props)
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| width | number \| string |
48 |
动画宽度 |
| height | number \| string |
48 |
动画高度 |
| frames | object |
必填 | Lottie 动画 JSON 数据 |
| loop | boolean |
true |
是否循环播放 |
| autoplay | boolean |
true |
是否自动播放 |
| speed | number |
1 |
播放速度 |
| textMap | object |
null |
声明式文本替换:{ '原文本或图层名': '新文本' } 或 { '图层名': { text: '新文本' } },仅改文字保留原样式 |
| imageMap | object |
null |
声明式图片替换:{ 'asset id 或名称': '图片 URL' } |
| clickableIds | array |
[] |
可点击元素 id 列表(对应 Lottie 中 asset id / refId),仅 H5/App SVG 生效 |
事件 (Events)
| 事件名 | 说明 | 参数 |
|---|---|---|
| domLoaded | 动画 DOM/渲染树加载完成 | — |
| complete | 动画播放完成(非循环时) | — |
| elementClick | 点击了 clickableIds 中的元素(仅 H5/App) |
{ id: string, event: Event } |
方法 (Methods)
通过 ref 调用,例如:this.$refs.lottie.play()。
动画控制(兼容 lottie-web 标准)
- play() — 播放
- stop() — 停止
- pause() — 暂停
- setSpeed(speed) — 设置播放速度
- gotoAndStop(value, isFrame) — 跳转到某一帧/时间并停止
- gotoAndPlay(value, isFrame) — 跳转到某一帧/时间并播放
- setDirection(direction) — 设置播放方向
- playSegments(segments, forceFlag) — 播放指定片段
- setLocationHref(href) — 设置 base URL(如 SVG 内链接)
- setSubframe(flag) — 是否使用子帧
文本替换(源数据级,全平台)
- replaceText(matcher, text) — 单处替换:
matcher为图层名/文本内容字符串,或{ layerName?, content?, layerIndex? } - replaceTexts(map) — 批量替换:
{ '原文本或图层名': '新文本' } - clearTextReplacements() — 清除所有命令式文本替换并重新初始化
图片替换(源数据级,全平台)
- replaceImage(assetId, imageUrl) — 按 asset id/名称替换一张图片
- replaceImages(map) — 批量替换:
{ 'asset id': '图片 URL' } - clearImageReplacements() — 清除所有命令式图片替换并重新初始化
运行时文本更新(domLoaded 后)
- updateDocumentData({ layerName?, layerIndex?, data }) — 直接更新文本图层内容,无需重载动画;
data支持{ t?, s?, fc?, f?, j?, lh?, ls? },返回boolean表示是否成功
其它
- getAnimInstance() — 返回底层 lottie 实例(便于高级用法)
- inspectTextLayers() — 列出当前动画所有文本图层信息(调试用)
使用示例
命令式替换文本
this.$refs.lottie.replaceText('24.4元', '99.9元');
this.$refs.lottie.replaceText({ layerName: '标题' }, '新标题');
this.$refs.lottie.replaceTexts({ '24.4元': '99.9元', '用户昵称': '张三' });
命令式替换图片
this.$refs.lottie.replaceImage('image_0', 'https://example.com/avatar.jpg');
this.$refs.lottie.replaceImages({ 'image_0': avatarUrl, 'image_1': goodsUrl });
运行时更新文本(domLoaded 后)
this.$refs.lottie.updateDocumentData({
layerName: '分数',
data: { t: '100' }
});
平台说明
- 微信小程序:需安装
lottie-miniprogram,使用 Canvas 2D;图片替换在 load 前写入 JSON,clickableIds/elementClick不生效。 - App / H5:需安装
lottie-web,使用 SVG 渲染;支持clickableIds与elementClick,图片可为网络 URL(组件内转 base64)。

收藏人数:
购买普通授权版(
试用
使用 HBuilderX 导入示例项目
赞赏(0)
下载 1349
赞赏 4
下载 11355547
赞赏 1864
赞赏
京公网安备:11010802035340号