更新记录

1.0.0(2026-07-17)

  • 首个稳定版本。
  • 支持 uni-app x Web、Android、iOS 和 HarmonyOS,以及 uni-app Vue 3 H5/Web。
  • 支持本地路径、远程 URL 和平台绝对路径加载 PAG 动画。
  • 支持自动播放、循环次数、画面适配、最大帧率、缓存和视频层配置。
  • 提供播放、暂停、停止、进度跳转、状态查询和缓存清理方法。
  • 提供 readyerrorstartendcancelrepeat 事件及统一错误码。
  • 支持通过唯一组件 ID 创建 Context,并支持同页多实例独立播放。
  • 集成 libpag 原生依赖,并随插件提供 Web WASM 资源和第三方许可证声明。

平台兼容性

uni-app(5.15)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
- - - - - -
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
- - - - - - - - - - - -

uni-app x(5.15)

Chrome Safari Android iOS 鸿蒙 微信小程序
-

hans-pag

hans-pag 是基于 libpag 的 PAG 动画播放组件,支持本地和远程 .pag 文件、播放控制、进度跳转、循环和多实例播放。

平台兼容

项目类型 Web Android iOS HarmonyOS
uni-app x 支持 支持 支持 支持
uni-app Vue 3 支持 不支持 不支持 不支持
  • HBuilderX 4.61+
  • Android API 21+,支持 armeabi-v7aarm64-v8ax86_64
  • iOS 12.0+
  • HarmonyOS NEXT API 15+,仅支持 arm64-v8a
  • Web 建议 Chrome 69+ 或 Safari 15+

安装

将插件导入项目,确认目录为 uni_modules/hans-pag。Android、iOS 和 HarmonyOS 使用原生依赖;调试 App 时如标准基座不包含依赖,请制作自定义调试基座。

uni-app x 用法

<template>
    <hans-pag
        id="bannerPag"
        class="pag"
        src="/static/pag/banner.pag"
        :autoplay="true"
        :repeat-count="0"
        scale-mode="letter-box"
        @ready="onReady"
        @error="onError"
    />
</template>

<script setup lang="uts">
    import { createHansPagContext } from "@/uni_modules/hans-pag"

    function onReady(e: UTSJSONObject) {
        console.log("duration", e.getNumber("durationMs", 0))
    }

    function onError(e: UTSJSONObject) {
        console.error(e.getString("code", ""), e.getString("message", ""))
    }

    function pauseBanner() {
        createHansPagContext("bannerPag")?.pause()
    }
</script>

<style>
    .pag {
        width: 300px;
        height: 300px;
    }
</style>

uni-app Vue 3 Web 用法

<template>
    <hans-pag ref="pagRef" class="pag" src="/static/pag/banner.pag" @error="onError" />
</template>

<script setup>
    import { ref } from 'vue'

    const pagRef = ref(null)

    function onError(e) {
        console.error(e.code, e.message)
    }

    function pauseBanner() {
        pagRef.value?.pause()
    }
</script>

Props

属性 类型 默认值 说明
id string 自动生成 使用 createHansPagContext 时必须设置唯一 ID
src string "" /static/...、远程 URL 或平台绝对路径
autoplay boolean true 加载完成后自动播放
repeatCount number 1 总播放次数,0 表示无限循环
scaleMode string "letter-box" nonestretchletter-boxzoom
maxFrameRate number 60 最大帧率,范围会归一化到 1~120
cacheEnabled boolean true 是否启用图形缓存
videoEnabled boolean true 是否渲染视频合成层
webFirstFrame boolean true 仅 Web,是否初始化首帧

事件

uni-app x 事件参数为 UTSJSONObject,uni-app Vue 3 Web 为普通对象。

事件 数据字段
ready srcdurationMswidthheight
error codemessagesrcplatform
start type
end type
cancel type
repeat type

错误码包括 E_UNSUPPORTED_PLATFORME_NATIVE_DEP_MISSINGE_INIT_FAILEDE_INVALID_SRCE_LOAD_FAILEDE_DECODE_FAILEDE_CANCELLEDE_WASM_LOAD_FAILEDE_RENDER_FAILED

实例方法

uni-app x 使用 createHansPagContext(id) 获取实例;uni-app Vue 3 Web 使用组件 ref。两者提供相同方法:

方法 说明
play() 播放或继续播放
pause() 暂停播放
stop() 停止并回到进度 0
isPlaying() 返回是否正在播放
setProgress(progress) 跳转进度,范围 0~1
getProgress() 获取当前进度
getDurationMs() 获取时长,单位毫秒
setRepeatCount(count) 设置总播放次数
setScaleMode(mode) 设置画面适配方式
freeCache() 清理当前播放器缓存

使用注意

  • 多实例使用时必须设置不同的 id,并在页面卸载后避免继续持有旧 Context。
  • Web 加载远程 PAG 时,资源服务器必须允许跨域访问。
  • Web 使用单线程 WASM;大量同屏实例可能受浏览器 WebGL context 数量和设备性能限制。
  • 普通 uni-app Vue 3 仅支持 H5/Web;Android、iOS、HarmonyOS 原生播放请使用 uni-app x。
  • 1.0.0 仅提供播放能力,不支持文字/图片替换、截图或图层查询。

隐私与许可证

组件自身不采集个人信息。src 为远程地址时,网络请求由宿主应用指定并负责合规。libpag 采用 Apache-2.0 许可证,相关许可证和第三方声明位于 LICENSES/

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

组件自身不采集个人信息;当 src 为远程地址时,会由业务方指定地址产生网络请求。

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。