效果

概述
本项目使用 svgaplayer.weapp.js 库来实现 SVGA 动画播放功能,支持在微信小程序、H5 等多端环境下播放高质量的矢量动画。SVGA 是一种跨平台的开源动画格式,具有文件小、渲染性能高的特点。
技术栈
- 核心库: svgaplayer.weapp.js (专为小程序优化的 SVGA 播放器)
- 框架: Vue 3 + Composition API
- 平台: 支持微信小程序、H5 等多端
(svgaplayer.weapp二次封装)
项目结构
src/
├── components/
│ ├── common/
│ │ └── svgaPlayer.vue # SVGA播放器核心组件
│ └── AnimationTemplate/
│ ├── index.vue # 简化版动画模板组件
│ └── AnimationTemplate.vue # 高级动画模板组件
├── static/
│ └── js/
│ └── svgaplayer.weapp.js # SVGA播放器库文件
└── pages/
└── sale-entry/
└── index.vue # 使用示例页面
核心组件
1. SvgaPlayer 组件 (src/components/common/svgaPlayer.vue)
这是 SVGA 播放的核心组件,负责加载、解析和播放 SVGA 动画文件。
主要特性:
- 支持本地和远程 SVGA 文件加载
- 内置缓存机制,避免重复加载
- 支持循环播放、播放控制
- 提供丰富的回调函数
- 自动适配不同平台的 Canvas API
2. AnimationTemplate 组件
基于 SvgaPlayer 的封装组件,提供了更易用的动画展示模板。
主要特性:
- 全屏遮罩展示
- 支持多种位置布局(居中、顶部、底部)
- 自动播放完成后隐藏
- 支持手动关闭按钮
使用方法
基础使用
- 引入组件
<template>
<view>
<!-- 基础使用 -->
<SvgaPlayer
ref="svgaPlayerRef"
:url="animationUrl"
:width="300"
:height="300"
:canvas-id="'myCanvas'"
:loops="1"
:clears-after-stop="true"
/>
<!-- 模板组件使用 -->
<AnimationTemplate
ref="animationTemplateRef"
:animation-url="animationUrl"
:width="400"
:height="400"
:loops="1"
:show-close-button="true"
@close="handleAnimationClose"
@animationStart="handleAnimationStart"
@animationEnd="handleAnimationEnd"
/>
</view>
</template>
<script setup>
import SvgaPlayer from '@/components/common/svgaPlayer.vue';
import AnimationTemplate from '@/components/AnimationTemplate/AnimationTemplate.vue';
const svgaPlayerRef = ref(null);
const animationTemplateRef = ref(null);
const animationUrl = 'https://xxx.***.com.cn/frontEnd/files/common/aidfinal1.svga';
</script>
- 程序化控制
// 开始播放动画
const startAnimation = () => {
if (animationTemplateRef.value) {
// 设置回调函数
setupAnimationCallbacks();
// 开始播放
animationTemplateRef.value.startAnimation();
}
};
// 设置动画回调
const setupAnimationCallbacks = () => {
if (animationTemplateRef.value) {
// 动画完成回调
animationTemplateRef.value.setOnFinished(() => {
console.log('动画播放完成');
animationTemplateRef.value.hide();
});
// 帧回调
animationTemplateRef.value.setOnFrame((frame) => {
console.log('当前帧:', frame);
});
// 进度回调
animationTemplateRef.value.setOnPercentage((percentage) => {
console.log('播放进度:', Math.<

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



