更新记录

1.1.0(2026-08-14)

  • 鸿蒙端改为 renderjs + libpag-web 方案(ArkWeb 中渲染),彻底解决原生库崩溃与 embed 空白问题
  • 修复鸿蒙 file:// 环境 CORS:wasm 内联 base64(script 加载),.pag 逻辑层下载转 base64 传递
  • 新增 width/height 属性:控制动画渲染分辨率(canvas 像素尺寸),动态修改实时生效
  • 修复等比缩放:libpag web PAGScaleMode 为数字枚举(fit=2),scaleMode 真正生效
  • 修复 H5 依赖加载:本地静态资源优先,CDN(jsdelivr/unpkg)多级兜底
  • App 下载统一使用 uni.downloadFile,移除 iOS/Android 原生下载实现(消除 Swift/Kotlin 编译兼容问题)
  • 小程序 wasm 内置插件(static/mp-weixin/),本地 .pag 素材自动兜底 .png 后缀
  • 修复小程序 canvas node 被 Vue3 响应式代理导致 libpag 崩溃(原生对象移出 data)

平台兼容性

uni-app(5.23)

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

sn-pag 腾讯 PAG 动画组件

基于腾讯 libpag 的跨平台 PAG 动画播放组件,支持 H5、微信小程序、App 安卓/iOS、App 鸿蒙。

平台支持

平台 渲染方式 说明
H5 libpag web (wasm) + canvas Chrome 69+ / Safari 11.3+
微信小程序 libpag-miniprogram (wasm) + webgl canvas 基础库 >= 2.9.0,需复制 wasm
App 安卓/iOS renderjs + libpag web (wasm) 在 vue 页面 webview 中渲染
App 鸿蒙 renderjs + libpag web (wasm) HBuilderX 4.23+,vue3(ArkWeb 中渲染)

注意:App 端在普通 vue 页面通过 renderjs 运行 libpag web 版(wasm),非原生 PAGView 性能。如需原生性能,建议在 nvue/uvue 页面使用原生组件。

安装

  1. uni_modules/sn-pag 目录复制到项目的 uni_modules/ 下。
  2. 安装 npm 依赖:
    npm install libpag libpag-miniprogram
  3. 微信小程序:wasm 已随插件内置(static/mp-weixin/),在微信开发者工具执行「工具 → 构建 npm」即可。本地 .pag 素材若读取失败(微信对 .pag 后缀限制),插件会自动尝试 .png 后缀,或将素材复制一份为 .png 后缀使用。
  4. App 端:使用 renderjs 方案,无需自定义基座;真机运行需配置网络下载权限(INTERNET 权限默认已有)。

基本用法

<template>
  <view style="width: 300px; height: 300px;">
    <sn-pag
      ref="pag"
      src="https://pag.qq.com/file/like.pag"
      :autoPlay="true"
      :repeatCount="-1"
      scaleMode="fit"
      :frameRate="60"
      @init="onInit"
      @load="onLoad"
      @animationStart="onStart"
      @animationEnd="onEnd"
      @frame="onFrame"
      @fail="onFail"
    />
  </view>
</template>

<script>
export default {
  methods: {
    onInit() {
      console.log("init");
    },
    onLoad(e) {
      console.log("load", e);
    },
    onStart() {
      console.log("start");
    },
    onEnd() {
      console.log("end");
    },
    onFrame(e) {
      console.log("progress", e.progress);
    },
    onFail(e) {
      console.error("fail", e);
    },
  },
  onUnload() {
    this.$refs.pag && this.$refs.pag.destroy();
  },
};
</script>

Props

属性 类型 默认值 说明
src string '' PAG 文件路径,支持 http(s):// 网络地址与本地路径
autoPlay boolean false 加载完成后自动播放
repeatCount number 0 0=播放一次,-1=无限循环,正整数=重复 N 次
scaleMode string 'fit' none / fit / fill
frameRate number 60 播放帧率上限
width number | string '' 动画渲染宽度(px):控制 canvas 像素分辨率与组件尺寸;不传则用 PAG 文件原始尺寸
height number | string '' 动画渲染高度(px):控制 canvas 像素分辨率与组件尺寸;不传则用 PAG 文件原始尺寸

Events

事件 参数 说明
init 运行时初始化完成
load { width, height, duration } PAG 文件加载完成
animationStart 动画开始
animationEnd 动画结束
animationRepeat 进入循环
animationCancel 动画被中断
frame { progress } 帧更新(0~1)
fail { code, message } 错误

Methods(通过 ref 调用)

方法 说明
play() 播放/继续
pause() 暂停
stop() 停止并回到第 0 帧
setProgress(progress) 跳转进度 0~1
getProgress() 获取当前进度
isPlaying() 是否播放中
load(src) 加载新文件
setRepeatCount(count) 设置循环次数
destroy() 释放资源

错误码

code 含义
1001 PAG 运行时初始化失败
1002 文件下载失败
1003 PAG 文件解析失败
1004 canvas 节点获取失败
1005 不支持的平台
1006 原生组件初始化失败(鸿蒙)

注意事项

H5

  • 网络 PAG 文件需服务端配置 CORS。
  • wasm 文件需正确 MIME(application/wasm)。
  • 默认从 jsdelivr CDN 加载 wasm,生产环境建议将 libpag wasm 部署到自己的静态服务器并修改 renderjs 中的 locateFile。

App 安卓/iOS

  • 网络文件由 UTS 原生层下载到缓存目录,再由 renderjs 读取。
  • 组件必须在页面 onUnload 时调用 destroy() 释放资源。
  • renderjs 运行在 webview,性能低于原生渲染,复杂动效请真机测试。

微信小程序

  • 必须复制 wasm 到 static/mp-weixin/ 并构建 npm。
  • 本地 .pag 文件可能需要改后缀为 .png

鸿蒙

  • 需要 HBuilderX 4.23+ 与鸿蒙 vue3 项目。
  • 实现方式:鸿蒙 vue 页面运行在 ArkWeb(webview)中,与 H5/App 端一样使用 renderjs + canvas + libpag-web 方案渲染(官方推荐,见 uni-app 文档:vue 页面可用 renderjs 集成 H5 版动画库)。
  • 不要使用 @tencent/libpag(鸿蒙原生库)+ defineNativeEmbed 原生组件方案:实测该方案存在严重问题——1.0.1 版本在 API 20 设备上必然崩溃(libpag.so NAPI 回调与新版 SDK 不兼容);4.5.88 版本在 embed(NodeController)环境中 XComponent 无法渲染(空白)。renderjs 方案彻底绕开这些问题。
  • 鸿蒙 repeatCount 语义与其他平台一致(插件内部已做映射)。
  • 注意:鸿蒙工具链对工程目录路径有限制(≤110字符、无中文特殊字符),如项目路径过长需在 .hbuilderx/launch.json 配置 distPathDev/distPathBuild 指定短路径。

依赖版本

  • libpag web: ^4.5.84
  • libpag-miniprogram: latest
  • 鸿蒙端无需 ohpm 原生依赖(采用 renderjs + libpag-web,不使用 @tencent/libpag 鸿蒙库)

隐私、权限声明

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

无网络权限以外的特殊权限

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

插件不采集任何数据

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

暂无用户评论。