更新记录
0.0.1(2026-10-28)
✨ 首次发布
平台兼容性
uni-app(4.73)
| Vue2 |
Vue3 |
Chrome |
Safari |
app-vue |
app-nvue |
Android |
iOS |
鸿蒙 |
| √ |
√ |
√ |
√ |
√ |
- |
5.0 |
√ |
√ |
| 微信小程序 |
支付宝小程序 |
抖音小程序 |
百度小程序 |
快手小程序 |
京东小程序 |
鸿蒙元服务 |
QQ小程序 |
飞书小程序 |
小红书小程序 |
快应用-华为 |
快应用-联盟 |
| √ |
√ |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
uni-app x(4.72)
| Chrome |
Safari |
Android |
iOS |
鸿蒙 |
微信小程序 |
| √ |
√ |
5.0 |
√ |
√ |
√ |
其他
| 多语言 |
暗黑模式 |
宽屏模式 |
蒸汽模式 |
| × |
× |
× |
√ |
ant-lottie Lottie动画组件
Lottie 动画组件,一套 API 多端运行,兼容 H5、微信/支付宝小程序、App(Android/iOS/鸿蒙) 以及 uni-app x。内置各端 Lottie 运行时,无需再执行 npm install 安装 lottie 相关依赖。
特性
- 🌈 多端统一:
<ant-lottie> 一个标签,全端渲染(Web SVG / 小程序 Canvas2d / App 原生引擎)
- 🎬 播放控制:播放、暂停、停止、跳转(帧/进度)、循环、自动播放、速度、方向
- 📡 事件监听:
complete、loopComplete、segmentStart、enterFrame*、destroy
- 📦 开箱即用:Web 与小程序端已内置 lottie 运行时
- 🍎 原生渲染:uni-app x 的 App 端使用原生 Lottie 引擎(lottie-android / lottie-ios / lottie-turbo)
* enterFrame 仅 Web 与小程序端支持,App 原生端出于性能考虑未逐帧回调。
平台兼容
| 平台 |
uni-app (vue2/vue3) |
uni-app x |
| Web(H5) |
SVG 渲染 |
SVG 渲染 |
| 微信小程序 |
Canvas 2d |
Canvas 2d |
| 支付宝小程序 |
Canvas 2d |
- |
| App-Android |
WebView 渲染 |
原生 LottieAnimationView |
| App-iOS |
WebView 渲染 |
原生 LottieAnimationView |
| App-Harmony |
WebView 渲染 |
原生 LottieView(lottie-turbo) |
快速上手
基础用法
<ant-lottie src="https://example.com/animation.json" l-style="height:200px"></ant-lottie>
通过 ref 控制
<view style="height:200px">
<ant-lottie ref="lottieRef" src="/static/lottie/heart.json"></ant-lottie>
</view>
<button @click="play">播放</button>
<button @click="pause">暂停</button>
<button @click="destroy">销毁</button>
const lottieRef = ref(null)
const play = () => lottieRef.value?.play()
const pause = () => lottieRef.value?.pause()
const destroy = () => lottieRef.value?.destroy()
动态加载动画
方式一:ref 调用 loadAnimation,返回 AntLottie 实例:
<view style="height:200px">
<ant-lottie ref="lottieRef"></ant-lottie>
</view>
<button @click="loadAndPlay">加载并播放</button>
const loadAndPlay = async () => {
const lottie = await lottieRef.value?.loadAnimation('https://example.com/animation.json')
lottie.setSpeed(2)
lottie.play()
}
方式二:通过 loaded 事件获取 loadAnimation 函数:
<view style="height:200px">
<ant-lottie @loaded="onLoaded" @complete="onComplete"></ant-lottie>
</view>
let loadAnimation = null
const onLoaded = (fn) => { loadAnimation = fn }
const onComplete = () => { console.log('播放完成') }
// 任意时机调用
const lottie = await loadAnimation('/static/lottie/heart.json')
lottie.addEventListener('loopComplete', () => { console.log('一次循环结束') })
直接传入动画数据
<ant-lottie :frames="animationData" :loop="true" :autoplay="true" :speed="1.5"></ant-lottie>
快速预览
导入插件后,直接使用以下标签可查看内置示例动画:
<ant-lottie-demo />
API
Props
| 属性名 |
说明 |
类型 |
默认值 |
| src |
动画资源路径,支持网络地址与 /static 本地路径 |
string |
- |
| frames |
动画数据(JSON 对象),优先级高于 src |
Object |
- |
| loop |
是否循环播放 |
boolean |
true |
| autoplay |
是否自动播放 |
boolean |
true |
| speed |
播放速度 |
number |
1 |
| lStyle |
自定义样式(组件需要指定高度才能显示) |
string | object |
- |
Events
| 事件名 |
说明 |
回调参数 |
| loaded |
组件挂载完成时触发 |
loadAnimation: (url) => Promise\<AntLottie> |
| ready |
动画实例创建完成时触发 |
lottie: AntLottie |
| complete |
动画播放完成时触发 |
- |
| error |
动画加载或播放出错时触发 |
error |
组件方法(通过 ref 调用)
| 方法名 |
说明 |
参数 |
返回值 |
| loadAnimation |
加载动画并返回实例 |
url: string | Object |
Promise\<AntLottie> |
| play |
播放当前动画 |
- |
- |
| pause |
暂停当前动画 |
- |
- |
| destroy |
销毁当前动画实例 |
- |
- |
AntLottie 实例方法
通过 loadAnimation 的返回值或 ready 事件获得:
| 方法名 |
说明 |
参数 |
| play |
播放动画 |
- |
| stop |
停止动画并回到起始位置 |
- |
| pause |
暂停动画 |
- |
| destroy |
销毁动画实例 |
- |
| setSpeed |
设置播放速度 |
speed: number |
| setDirection |
设置播放方向 |
direction: 1 | -1 |
| goToAndPlay |
跳转到指定位置并播放 |
value: number, isFrame?: boolean |
| goToAndStop |
跳转到指定位置并暂停 |
value: number, isFrame?: boolean |
| addEventListener |
添加事件监听 |
name: AnimationEventName, callback: Function |
| removeEventListener |
移除事件监听 |
name: AnimationEventName |
AnimationEventName 可选值:enterFrame(仅Web/小程序)、loopComplete、complete、segmentStart、destroy
使用说明与注意事项
- 组件高度:组件默认撑满父容器,请通过
l-style 或父容器为组件指定高度。
- 小程序端
src 仅支持 http(s) 网络地址或 frames 传入动画数据;本地路径请使用 frames。
- App 端本地
/static 动画由插件自动读取并传入渲染层,无需额外处理。
- uni-app x 的 App 端(Android/iOS/鸿蒙)需使用自定义基座运行;首次编译需在 HBuilderX 中制作自定义基座。
- 鸿蒙端使用
@ohos/lottie-turbo 渲染,在模拟器上较大的动画文件可能出现卡顿,建议真机测试。
- 动态切换动画:各端均支持对同一组件多次调用
loadAnimation 加载不同动画;鸿蒙端以真机表现为准。
- Vue2 项目无需安装 composition-api,组件基于 Options API 实现,vue2/vue3 均可直接使用。
目录结构
ant-lottie
├── common # 内置 lottie 运行时(Web/小程序端)
├── components
│ ├── ant-lottie # 组件源码(.vue 为 uni-app,.uvue 为 uni-app x)
│ └── ant-lottie-demo # 快速预览示例
├── utssdk
│ ├── app-android # Android 原生实现 (lottie-android)
│ ├── app-ios # iOS 原生实现 (lottie-ios)
│ └── app-harmony # 鸿蒙原生实现 (lottie-turbo)
├── changelog.md
├── readme.md
└── THIRD-PARTY-NOTICES.md # 第三方库版权声明
第三方引擎
本插件基于以下优秀的开源引擎封装,版权声明详见 THIRD-PARTY-NOTICES.md: