更新记录
1.0.0(2026-07-12)
- 发布 Android、iOS UTS 原生 Rive
.riv动画组件。 - 支持 uni-app App nvue 页面和 uni-app x App。
- 支持本地
/static文件、本地绝对路径、content://地址和网络资源。 - 支持指定 Artboard、Animation、State Machine、缩放、对齐和循环模式。
- 支持播放、暂停、继续、停止、重置、清理和重新加载。
- 支持 State Machine 的 trigger、boolean、number 输入。
- 支持加载、就绪、播放、暂停、继续、停止、重置、输入、清理和错误事件。
- Android 原生操作和事件统一切换到主线程,兼容传统 uni-app nvue 的 ref 方法调用。
- Android 在标准基座缺少 Rive runtime 时返回
missing_runtime,避免应用崩溃。
平台兼容性
uni-app(3.8.0)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | app-nvue插件版本 | Android | Android插件版本 | iOS | iOS插件版本 | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | √ | 1.0.0 | 6.0 | 1.0.0 | 14 | 1.0.0 | - |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | - | - | - | - | - | - | - |
uni-app x(3.8.0)
| Chrome | Safari | Android | Android插件版本 | iOS | iOS插件版本 | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|---|---|
| - | - | 6.0 | 1.0.0 | 14 | 1.0.0 | - | - |
kongbai-rive
kongbai-rive 是基于 UTS 原生组件开发的 Rive .riv 动画播放器,适用于 uni-app App nvue 页面和 uni-app x App。组件封装 Android、iOS 官方 Rive Runtime,支持本地和网络资源、普通动画、State Machine、播放控制、循环、缩放及对齐。
适合启动动画、空状态、按钮反馈、引导页、直播互动、角色动画等 App 场景。组件不包含广告代码,不采集、不存储、不上传用户个人信息。
平台支持
| 平台 | 支持情况 |
|---|---|
| uni-app App nvue Android | 支持 |
| uni-app App nvue iOS | 支持 |
| uni-app x App Android | 支持 |
| uni-app x App iOS | 支持 |
| uni-app 普通 vue 页面 | 不支持 |
| Web / H5 | 不支持 |
| 各类小程序 | 不支持 |
组件依赖原生 Rive SDK。安装或更新插件后,必须重新制作自定义基座或重新云打包,标准基座和热更新无法添加第三方 AAR、CocoaPods 及 native .so。
原生依赖
- Android:
app.rive:rive-android:10.4.5 - Android 最低版本:API 23
- iOS:
RiveRuntime 6.21.1 - iOS 最低版本:iOS 14
依赖已写入插件的 app-android/config.json 和 app-ios/config.json,制作基座或云打包时由 HBuilderX 自动下载。
安装和运行
- 将插件放入项目的
uni_modules/kongbai-rive。 - 将有效的
.riv文件放入项目static,例如static/rive/demo.riv。 - 重新制作自定义基座,选择自定义基座运行项目。
组件遵循 uni_modules 规范自动注册,不需要手动 import。
- 传统
uni-app必须在.nvue页面中使用。 uni-app x在.uvue页面中使用。- 示例中的
/static/rive/demo.riv请替换为项目自己的有效 Rive 文件。
uni-app nvue 最简示例
<template>
<view>
<kongbai-rive
ref="rive"
class="rive-player"
src="/static/rive/demo.riv"
stateMachine="Designer's Test"
:autoPlay="true"
@ready="onReady"
@error="onError"
></kongbai-rive>
<text @click="pause">暂停</text>
<text @click="resume">继续</text>
<text @click="setExpert">切换 Expert</text>
</view>
</template>
<script>
export default {
methods: {
pause() {
this.$refs.rive.pause()
},
resume() {
this.$refs.rive.resume()
},
setExpert() {
this.$refs.rive.setNumber('Level', 2)
},
onReady() {
console.log('Rive 加载完成')
},
onError(event) {
const detail = event.detail || event
console.log('Rive 加载失败', detail.dynamicJSONFields || detail)
}
}
}
</script>
<style>
.rive-player {
width: 750rpx;
height: 500rpx;
}
</style>
传统 nvue 直接通过组件 ref 调用公开方法,不要使用 $callMethod(),也不要将 ref 强制转换为普通 Vue 组件。
uni-app x 最简示例
<template>
<view>
<kongbai-rive
ref="riveRef"
class="rive-player"
src="/static/rive/demo.riv"
stateMachine="Designer's Test"
:autoPlay="true"
@ready="onReady"
@error="onError"
/>
</view>
</template>
<script setup lang="uts">
const riveRef = ref<KongbaiRiveElement | null>(null)
const pause = () => riveRef.value?.pause()
const resume = () => riveRef.value?.resume()
const setExpert = () => riveRef.value?.setNumber('Level', 2)
const onReady = () => console.log('Rive 加载完成')
const onError = () => console.log('Rive 加载失败')
</script>
<style lang="scss">
.rive-player {
width: 750rpx;
height: 500rpx;
}
</style>
加载资源
本地资源
推荐将文件放在项目 static/rive 目录,通过根路径加载:
<kongbai-rive src="/static/rive/demo.riv" />
也可以通过方法切换文件:
this.$refs.rive.load('/static/rive/demo.riv')
不要引用 unpackage 中的编译产物。插件会将 /static 路径转换为 App 运行时的真实文件地址。
网络资源
this.$refs.rive.load('https://example.com/demo.riv')
网络地址必须能被 App 直接访问。Android 的 content:// 地址和本地绝对路径也可以传给 load()。
普通动画和 State Machine
普通 Animation:
<kongbai-rive
src="/static/rive/demo.riv"
animation="Animation 1"
loop="loop"
/>
State Machine:
<kongbai-rive
ref="rive"
src="/static/rive/demo.riv"
stateMachine="Main State Machine"
/>
this.$refs.rive.fire('submit')
this.$refs.rive.setBoolean('active', true)
this.$refs.rive.setNumber('progress', 50)
Artboard、Animation、State Machine 和输入名称必须与 Rive Editor 中完全一致。如果文件只有空时间轴,组件会正常加载但画面不会变化。
属性
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
src |
String | "" |
.riv 本地路径或网络地址;变化后自动加载 |
source |
String | "" |
src 的兼容别名,同时设置时以 src 为准 |
autoPlay |
Boolean | true |
加载完成后是否自动播放 |
artboard |
String | "" |
Artboard 名称,留空使用默认 Artboard |
animation |
String | "" |
Animation 名称 |
stateMachine |
String | "" |
State Machine 名称;设置后优先于 animation |
fit |
String | contain |
缩放模式 |
alignment |
String | center |
对齐方式 |
loop |
String | auto |
循环模式 |
interactive |
Boolean | true |
原生视图是否接收触摸事件 |
fit
支持 contain、cover、fill、fitWidth、fitHeight、none、scaleDown。兼容下划线形式,例如 fit_width。
alignment
支持 center、top、bottom、left、right、topLeft、topRight、bottomLeft、bottomRight。兼容下划线形式,例如 top_left。
loop
| 值 | 说明 |
|---|---|
auto |
使用 .riv 文件内配置 |
loop / repeat |
循环播放 |
oneShot / one_shot |
播放一次 |
pingPong / ping_pong |
往返播放 |
方法
| 方法 | 参数 | 说明 |
|---|---|---|
load(src) |
src: String |
加载新的 .riv 资源 |
reload() |
无 | 重新加载当前资源 |
play() |
无 | 播放当前 Animation 或 State Machine |
playAnimation(name) |
Animation 名称 | 播放指定 Animation |
pause() |
无 | 暂停并保留当前画面 |
resume() |
无 | 继续播放 |
stop() |
无 | 停止播放 |
resetAnimation() |
无 | 重置当前动画 |
resetRive() |
无 | resetAnimation() 的别名,仅 Android |
fire(name) |
输入名称 | 触发当前 State Machine 的 trigger |
setBoolean(name, value) |
输入名称、Boolean | 设置 boolean 输入 |
setNumber(name, value) |
输入名称、Number | 设置 number 输入 |
setInput(name, value) |
输入名称、值 | 按值类型设置输入;null 表示 trigger |
clear() |
无 | 停止播放并释放当前资源 |
getState() |
无 | 获取组件内部状态;nvue 业务不要依赖同步返回值 |
事件
| 事件 | 说明 |
|---|---|
load |
开始加载资源 |
ready |
资源解析完成,原生视图可以播放 |
play |
开始播放 |
pause |
播放暂停 |
resume |
继续播放 |
stop |
播放停止 |
reset |
动画已重置 |
input |
State Machine 输入或状态发生变化 |
clear |
当前资源已清理 |
error |
加载、解析或运行环境异常 |
Android 事件数据包含 src,错误事件额外包含 code 和 message。传统 nvue 可能将事件数据包装在 dynamicJSONFields 中。iOS 当前主要将事件作为状态通知使用,不保证携带与 Android 相同的详情。
Android 错误码
| 错误码 | 说明 |
|---|---|
missing_runtime |
当前基座没有包含 Rive AAR/so,需要重新制作自定义基座 |
empty_src |
资源地址为空 |
load_failed |
无法读取本地文件或下载网络资源 |
view_unavailable |
原生 Rive View 尚未创建或已销毁 |
bind_failed |
.riv 文件解析或初始化失败 |
iOS 可能返回 empty_src、invalid_src、read_failed、parse_failed、load_failed 等错误状态。
常见问题
标准基座启动后崩溃或提示 missing_runtime
标准基座不包含 Rive Android AAR 和 native .so。请重新制作包含本插件的自定义基座,并在运行窗口选择该基座。仅重新编译页面或热更新无效。
nvue 提示 load is not a function
确认页面扩展名是 .nvue,插件位于 uni_modules/kongbai-rive,并且插件目录中没有同名普通 Vue 包装组件。更新插件后需要停止旧任务并重新编译。
ready 和 play 已触发,但画面不动
先确认 .riv 文件内存在真正有关键帧变化的 Animation 或有效 State Machine。部分文件虽然包含名为 Animation 1 的空时间轴,但前后画面完全相同。建议显式填写正确的 animation 或 stateMachine 名称。
点击方法没有反应
确认已经收到 ready。传统 nvue 直接调用 this.$refs.rive.play(),不要使用 $callMethod()。State Machine 输入名称必须与文件完全一致。
动画区域空白
必须给组件设置明确宽高,并确认资源路径可读。建议先使用已确认包含有效动画或 State Machine 的 .riv 文件排除资源问题。
相关文档
技术支持 QQ:6864952

收藏人数:
购买源码授权版(
试用
赞赏(0)
下载 8
赞赏 0
下载 12417505
赞赏 1933
赞赏
京公网安备:11010802035340号