# wx-svga-parser **Repository Path**: ghkeeping/wx-svga-parser ## Basic Information - **Project Name**: wx-svga-parser - **Description**: 微信小程序解析svga播放动画 - **Primary Language**: TypeScript - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2023-05-08 - **Last Updated**: 2024-01-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # wx-svga-parser #### 介绍 svga为美工设计的一个动画效果,导出为svga文件,可以通过代码修改svga里面指定图层的图片或文字。 wx-svga-parser在微信小程序中解析并实现播放动画效果。 #### 支持本仓库 轻点Star,让更多人看到该项目。 #### 软件架构 ``` 语言:Typescript 目录 dist --> 打包产物 Parser --> 解析svga文件 Platform --> 抹平微信wx平台问题 Player --> svga播放器 Render --> 绘制渲染svga文件 Types --> 公共的类型声明 Utils --> 公共的工具函数 main --> wx-svga-parser解析器的导出入口文件 ``` #### 安装教程 1. 复制dist文件中的svga-parser-mini.js文件到微信小程序项目上; 2. 在需要添加播放器的`wxml`文件内,添加`canvas`组件(注意:`canvas`的id为必填,在实例播放器时会用到),type必须为2d。 ```wxml ``` 3. 在需要播放的时机,本demo选择`onLoad`,执行以下代码,即可播放动画。 ```javascript import { Player } from './libs/svga-parser-mini.js' Page({ onLoad() { // 实例化播放器 Player const player = new Player({ id: '#canvasId', url: 'https://gygc-1253229355.cos.ap-guangzhou.myqcloud.com/image_mini/yjjy_home02.svga' }) // 开始执行播放 player.mount() } }) ``` ### API 实例时参数: | 名称 | 类型 | 默认值 | 说明 | 必传 | | :---------: | :-------: | :-------: | :----------------------------------------------------------: | :--: | | id | String | - | canvas元素id | Y | | url | String | - | svga链接(网络地址、本地资源地址) | Y | | component | Component | - | 若该播放器在组件内,需传组件的实例`this` | N | | contentMode | String | AspectFit | 动画缩放模式,可选值:'Fill' \| 'AspectFit' \| 'AspectFill' | N | | loops | Number | 0 | 动画的循环次数。0表示无限循环 | N | | fillMode | String | Forward | 可选值:'Forward' \| 'Backward'。Backward表示动画结束时保留第一帧;Forward表示动画结束时保留最后一帧。 | N | 实例方法: | 名称 | 参数 | 描述 | | :-------------: | :--------------------------------------------------------: | :----------------------------------------------------------: | | mount | - | 开始播放动画 | | start | (reverse?: boolean) | 重新开始播放动画。`reverse`默认值为`false`。`reverse`为`true`反向播放动画 | | pause | - | 暂停播放动画 | | stop | (clear?: boolean):void | 停止播放动画。`clear`默认值为`false`。`clear`为`true`时,在停止播放动画后清空动画。 | | clear | - | 清空动画 | | startWidthRange | (range: IRange, reverse?: boolean) | 开始播放动画,在指定`IRange`内播放动画。`reverse`默认值为`false`。`reverse`为`true`时方向播放动画。 | | setContentMode | (mode: IContentMode) | 设置动画缩放模式。`IcontentMode`可选值:'Fill' \| 'AspectFit' \| 'AspectFill' | | setText | (dynamicText: IDynamicText, forKey: string) | 添加指定文本到元素上。`forKey`为指定元素的`name` | | setImage | (src: Uint8Array \| string, forKey: string): Promise | 使用图片替换指定元素。`forKey`为指定元素的`name` | | clearDynamic | - | 清空所有替换元素 | | onFinished | (callback: () => void) | 监听动画完成 | | onFrame | (callback: (frame: number) => void) | 监听动画播放过程中,当前帧的变化,`frame`为当前帧数 | | onPercentage | (callback: (percentage: number) => void) | 监听动画播放过程中,当前进度的变化 | | stepToFrame | (callback: (frame: number, isPlay?: boolean) => void) | 跳转动画到指定帧,`isPlay`为true时,从该帧开始播放动画 | | onPercentage | (callback: (percentage: number, isPlay?: boolean) => void) | 跳转动画到指定百分比,`isPlay`为true时,从该帧开始播放动画 | **变量类型:** #### IRange ```typescript interface IRange { location: number // 起始帧 length: number // 长度 } ``` #### IDynamicText ```typescript interface IDynamicText { text: string size: number family: string color: string offset: { x: number, y: number } } ``` #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支N 3. 提交代码 4. 新建 Pull Request