lottie动画指南

效果

概述

本项目使用 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 的封装组件,提供了更易用的动画展示模板。

主要特性:

  • 全屏遮罩展示
  • 支持多种位置布局(居中、顶部、底部)
  • 自动播放完成后隐藏
  • 支持手动关闭按钮

使用方法

基础使用

  1. 引入组件
<template><view><!-- 基础使用 --><SvgaPlayerref="svgaPlayerRef":url="animationUrl":width="300":height="300":canvas-id="'myCanvas'":loops="1":clears-after-stop="true"/><!-- 模板组件使用 --><AnimationTemplateref="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>
  1. 程序化控制
// 开始播放动画
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.round(percentage * 100) + '%');});}
};

API 接口

SvgaPlayer Props

参数类型默认值说明
urlString必传SVGA 文件的 URL 地址
widthString/Number300动画宽度
heightString/Number300动画高度
canvasIdString‘svgaCanvas’Canvas 元素的 ID
loopsNumber1循环播放次数,0 表示无限循环
clearsAfterStopBooleanfalse播放完成后是否清除画布

SvgaPlayer Methods

方法名参数说明
initPlayer()-初始化播放器
preload(url, callback)url: 预加载的 URL <br>callback: 回调函数预加载 SVGA 文件
showSvga()-显示并播放动画
startAnimation()-开始播放动画
stopAnimation(clear)clear: 是否清除画布停止播放动画
pauseAnimation()-暂停播放动画
setOnFinished(callback)callback: 回调函数设置播放完成回调
setOnFrame(callback)callback: 回调函数设置帧回调
setOnPercentage(callback)callback: 回调函数设置进度回调

AnimationTemplate Props

参数类型默认值说明
animationUrlString必传SVGA 文件的 URL 地址
widthString/Number300动画宽度
heightString/Number300动画高度
canvasIdString‘animationTemplateCanvas’Canvas 元素的 ID
loopsNumber1循环播放次数
clearsAfterStopBooleanfalse播放完成后是否清除画布
showCloseButtonBooleantrue是否显示关闭按钮
backgroundOpacityNumber0.5背景遮罩透明度
positionString‘center’动画位置:‘center’, ‘top’, ‘bottom’
zIndexNumber9999层级索引

AnimationTemplate Methods

方法名参数说明
show()-显示动画
hide()-隐藏动画
startAnimation()-开始播放动画
stopAnimation()-停止播放动画
preloadAnimation()-预加载动画
setOnFinished(callback)callback: 回调函数设置播放完成回调
setOnFrame(callback)callback: 回调函数设置帧回调
setOnPercentage(callback)callback: 回调函数设置进度回调

AnimationTemplate Events

事件名参数说明
close-动画关闭时触发
animationStart-动画开始播放时触发
animationEnd-动画播放结束时触发

配置参数

SVGA 库配置

SVGA 播放器支持多种路径配置,组件会自动尝试以下路径:

// 相对路径(推荐)
require('../../static/js/svgaplayer.weapp.js');// 根目录路径
require('/static/js/svgaplayer.weapp.js');// 当前目录路径
require('./svgaplayer.weapp.js');

Canvas 配置

  • 类型: type="2d" (推荐使用 2D Canvas)
  • 像素比: 自动适配设备像素比
  • 大小: 支持响应式尺寸设置

最佳实践

1. 性能优化

// 预加载动画文件
const preloadAnimations = async () => {if (svgaPlayerRef.value) {await svgaPlayerRef.value.preload(animationUrl);}
};// 使用缓存避免重复加载
const svgaCollection = {}; // 在组件内部已实现缓存

2. 错误处理

// 监听加载失败
const handleAnimationError = () => {console.error('SVGA动画加载失败');// 显示备用方案或错误提示
};

3. 内存管理

// 组件销毁时清理资源
onUnmounted(() => {if (animationTemplateRef.value) {animationTemplateRef.value.stopAnimation();}
});

4. 平台兼容

// 检查平台支持
const checkSVGASupport = () => {// 组件内部已处理平台兼容性return typeof SVGA !== 'undefined';
};

常见问题

Q1: 动画播放不显示或报错?

A1: 检查以下几点:

  • 确认 SVGA 文件 URL 是否正确且可访问
  • 检查 Canvas 元素是否正确渲染
  • 查看控制台是否有 SVGA 库加载错误

Q2: 动画播放卡顿或性能问题?

A2: 优化建议:

  • 使用预加载功能提前加载动画文件
  • 控制动画尺寸,避免过大的 Canvas
  • 及时清理不需要的动画实例

Q3: 在不同平台表现不一致?

A3: 处理方案:

  • 组件已内置多平台适配逻辑
  • 如遇问题,检查是否使用了平台特定的 API
  • 确保 SVGA 文件格式符合标准

Q4: 动画播放完成后如何处理?

A4: 使用回调函数:

animationRef.value.setOnFinished(() => {// 播放完成后的处理逻辑console.log('动画播放完成');
});

示例代码

完整使用示例

<template><view class="animation-demo"><!-- 触发按钮 --><button @click="startAnimation">开始播放动画</button><!-- SVGA动画组件 --><AnimationTemplateref="animationTemplateRef":animation-url="animationUrl":width="400":height="400":loops="1":show-close-button="true"position="center"@close="handleAnimationClose"@animationStart="handleAnimationStart"@animationEnd="handleAnimationEnd"/></view>
</template>
<script setup>
import { ref, onMounted, onUnmounted } from 'vue';
import AnimationTemplate from '@/components/AnimationTemplate/AnimationTemplate.vue';// 组件引用
const animationTemplateRef = ref(null);// 动画配置
const animationUrl = 'https://static.wxb.com.cn/frontEnd/files/common/aidfinal1.svga';// 开始播放动画
const startAnimation = () => {if (animationTemplateRef.value) {setupAnimationCallbacks();animationTemplateRef.value.startAnimation();}
};// 设置动画回调
const setupAnimationCallbacks = () => {if (animationTemplateRef.value) {// 播放完成回调animationTemplateRef.value.setOnFinished(() => {console.log('SVGA动画播放完成');animationTemplateRef.value.hide();uni.showToast({title: '动画播放完成',icon: 'success',duration: 1500,});});// 帧回调(可选)animationTemplateRef.value.setOnFrame((frame) => {console.log('当前帧:', frame);});// 进度回调(可选)animationTemplateRef.value.setOnPercentage((percentage) => {console.log('播放进度:', Math.round(percentage * 100) + '%');});}
};// 事件处理
const handleAnimationClose = () => {console.log('动画被手动关闭');
};const handleAnimationStart = () => {console.log('动画开始播放');
};const handleAnimationEnd = () => {console.log('动画播放结束');
};// 生命周期
onMounted(() => {// 可以在这里预加载动画if (animationTemplateRef.value) {animationTemplateRef.value.preloadAnimation();}
});onUnmounted(() => {// 清理资源if (animationTemplateRef.value) {animationTemplateRef.value.stopAnimation();}
});
</script>
<style lang="scss" scoped>
.animation-demo {padding: 20rpx;
}
</style>

基础播放器示例

<template><view class="basic-player"><SvgaPlayerref="svgaPlayerRef":url="animationUrl":width="300":height="300":canvas-id="'basicCanvas'":loops="0":clears-after-stop="false"/><view class="controls"><button @click="play">播放</button><button @click="pause">暂停</button><button @click="stop">停止</button></view></view>
</template>
<script setup>
import { ref } from 'vue';
import SvgaPlayer from '@/components/common/svgaPlayer.vue';const svgaPlayerRef = ref(null);
const animationUrl = 'https://static.wxb.com.cn/frontEnd/files/common/aidfinal1.svga';const play = () => {svgaPlayerRef.value?.startAnimation();
};const pause = () => {svgaPlayerRef.value?.pauseAnimation();
};const stop = () => {svgaPlayerRef.value?.stopAnimation(true);
};
</script>

总结

本 SVGA 动画插件为项目提供了完整的矢量动画播放解决方案,具有以下优势:

  1. 高性能: 基于 Canvas 2D 渲染,支持硬件加速
  2. 跨平台: 支持微信小程序、H5 等多端环境
  3. 易用性: 提供了简单易用的组件 API
  4. 功能完整: 支持播放控制、回调监听、预加载等功能
  5. 稳定性: 内置错误处理和资源管理机制

通过合理使用这些组件和 API,可以在项目中轻松实现高质量的动画效果,提升用户体验。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/88363.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/88363.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/88363.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构与算法——计算直线的交点数

前言&#xff1a; 这是之前做的一道笔试题&#xff0c;当时没写出来烦恼很久&#xff0c;这次记录一下。 题目链接&#xff1a; Dotcpp--题目 1174: 计算直线的交点数 参考文章&#xff1a; CSDN--槐阳7--计算直线的交点数 题目&#xff1a; 解题思考&#xff1a; 在当时…

大模型及agent开发6 OpenAI Assistant API 高阶应用 - 流式输出功能

1.Assistant API 的主要优点&#xff1a; 减少编码工作量、自动管理上下文窗口、安全的访问控制、工具和文档的轻松集成 本节讲应用设计和性能流式输出&#xff1a;借助流式输出&#xff0c;可以让应用程序实时处理和响应用户输入。具体来说&#xff0c;这种技术允许数据在生成…

React Native安卓刘海屏适配终极方案:仅需修改 AndroidManifest.xml!

&#x1f4cc; 问题背景在 React Native 开发中&#xff0c;我们经常会遇到安卓设备刘海屏&#xff08;Notch&#xff09;适配问题。即使正确使用了 react-native-safe-area-context 和 react-navigation&#xff0c;在一些安卓设备&#xff08;如小米、华为、OPPO 等&#xff…

Spring Boot整合MyBatis+MySQL实战指南(Java 1.8 + 单元测试)

一、环境准备 开发工具&#xff1a;IntelliJ IDEA 2023.1 JDK 1.8.0_382 Maven3.6.3数据库&#xff1a;MySQL 8.0.21依赖版本&#xff1a;<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifact…

游戏开发日记

如何用数据表来储存&#xff0c;位置坐标&#xff08;XYZ&#xff09;&#xff1a;决定了对象在世界中的摆放资源ID / 图片URL&#xff1a;决定了使用什么模型或贴图事件ID / 特效&#xff1a;是否触发某些事件&#xff08;例如点击、交互&#xff09;逻辑索引&#xff08;Grid…

如何使用xmind编写测试用例

如何使用xmind编写测试用例为什么要使用xmind&#xff1f;使用xmind编写测试用例是为了梳理我们的思路。使用xmind编写测试用例的思路是什么&#xff1f;先进行分析再提取测试用例。 例如下面的注册功能的测试用例的分析&#xff1a; 分析&#xff1a; 先提取出需要测试的功能点…

使用LLaMA-Factory微调Qwen2.5-VL-3B 的目标检测任务-数据集格式转换(voc 转 ShareGPT)

一、LLaMA-Factory Qwen2.5-VL ShareGPT 格式要求ShareGPT 格式就是多轮对话的 list&#xff0c;每条数据如下&#xff1a;[{"conversations": [{"from": "user", "value": "<image>\n请标注图片中的所有目标及其类别和位…

【SkyWalking】服务端部署与微服务无侵入接入实战指南

【SkyWalking】服务端部署与微服务无侵入接入实战指南 &#x1f4a1; SkyWalking 系列总引导 在微服务架构快速演进的今天&#xff0c;如何有效实现服务链路追踪、性能分析、日志采集与自动化告警&#xff0c;成为系统稳定性的关键保障手段。 SkyWalking&#xff0c;作为 Apa…

LVDS系列20:Xilinx 7系ISERDESE2原语(一)

Xilinx 7系FPGA bank的io单元如下&#xff1a;Hr bank比hp bank少odelaye2组件&#xff0c;两者的idelaye2组件后面&#xff0c;都有iserdese2组件&#xff1b; iserdese2组件是一种专用的串并转换器或称解串器&#xff0c;用于高速源同步应用&#xff0c;如大部分LVDS信号解析…

【U-Boot】Shell指令

目录 U-Boot 三个Shell U-Boot Shell Linux Shell shell脚本 总结 U-Boot Shell命令 帮助命令 部分命令分类与功能说明 一、基础操作与信息查询 二、内存操作 三、启动管理 四、文件系统操作 五、设备与分区管理 六、环境变量 七、诊断与调试 八、特殊功能 九…

《Revisiting Generative Replay for Class Incremental Object Detection》阅读笔记

摘要Abstract部分 原文 Generative replay has gained significant attention in class-incremental learning; however, its application to Class Incremental Object Detection (CIOD) remains limited due to the challenges in generating complex images with precise …

Mysql: Bin log原理以及三种格式

目录 一、什么是 Binlog&#xff1f; 二、Binlog 的应用场景与案例 1. 数据恢复 (Point-in-Time Recovery) 2. 主从复制 (Master-Slave Replication) 3. 数据审计 三、Binlog 的三种格式 1. STATEMENT 模式 (Statement-Based Logging - SBL) 2. ROW 模式 (Row-Based Log…

LiteHub之文件下载与视频播放

文件下载 前端请求 箭头函数 //这个箭头函数可以形象理解为&#xff0c;x流入&#xff08;>&#xff09;x*x, //自然而然>前面的就是传入参数,>表示函数体 x > x * x//相当于 function (x) {return x * x; }//如果参数不是一个&#xff0c;就需要用括号()括起来…

QT5使用cmakelists引入Qt5Xlsx库并使用

1、首先需要已经有了Qt5Xlsx的头文件和库&#xff0c;并拷贝到程序exe路径下&#xff08;以xxx.exe/3rdparty/qtxlsx路径为例&#xff0c;Qt5Xlsx版本为0.3.0&#xff09;&#xff1b; 2、cmakelist中&#xff1a; # 设置 QtXlsx 路径 set(QTXLSX_ROOT_DIR ${CMAKE_CURRENT_SOU…

醋酸镨:闪亮的稀土宝藏,掀开科技应用新篇章

一、什么是醋酸镨醋酸镨是一种镨的有机盐&#xff0c;镨是稀土金属元素之一。作为一种重要的稀土化合物&#xff0c;醋酸镨通常以水合物的形式存在&#xff0c;呈现淡黄色或无色结晶。镨元素本身因其独特的物理化学特性&#xff0c;在工业和科技领域有着广泛应用&#xff0c;而…

深入解析JVM内存结构与垃圾回收机制

java是强类型高级语言JVM&#xff08;Java Virtual Machine&#xff0c;Java虚拟机&#xff09;是Java平台的核心组件&#xff0c;它是一个虚拟的计算机&#xff0c;能够执行Java字节码&#xff08;bytecode&#xff09;。1、区域划分JVM对Java内存的管理也是分区分块进行&…

Java 流程控制详解:从顺序执行到跳转语句,掌握程序逻辑设计

作为一名Java开发工程师&#xff0c;你一定知道&#xff0c;流程控制&#xff08;Flow Control&#xff09; 是编写任何程序的核心。它决定了代码的执行路径、分支走向和循环次数。本文将带你系统梳理 Java中的所有常用流程控制结构&#xff0c;包括&#xff1a;顺序结构分支结…

面试150 环形链表

思路 采用双指针法,slow指针每次走一步,fast指针每次走两步&#xff0c;如果相遇的情况下&#xff0c;slow指针回到开始的位置,此时快慢指针各走一步&#xff0c;当相遇的时候也就是说明链表中有环。 # Definition for singly-linked list. # class ListNode: # def __init…

AI技术正在深度重构全球产业格局,其影响已超越工具属性,演变为推动行业变革的核心引擎。

一、AI如何重塑AI的工作与行业&#xff08;AI助手领域&#xff09;能力升级理解与生成&#xff1a;基于LLM&#xff08;大语言模型&#xff09;&#xff0c;AI能处理开放式问题、撰写报告、翻译代码&#xff0c;替代部分人类知识工作。个性化交互&#xff1a;通过用户历史对话分…

Kafka的无消息丢失配置怎么实现

那 Kafka 到底在什么情况下才能保证消息不丢失呢&#xff1f; Kafka 只对“已提交”的消息&#xff08;committed message&#xff09;做有限度的持久化保证。 第一个核心要素是“已提交的消息”。什么是已提交的消息&#xff1f;当 Kafka 的若干个 Broker 成 功地接收到一条…