vue3+vite+ts项目里使用svga动画测试篇

可选的svga播放器有很多种,我就选其一SVGAPlayer-Web-Lite来试试。

SVGAPlayer-Web-Lite
这是一个 SVGA 在移动端 Web 上的播放器,它的目标是 更轻量、更高效。

优点:

  • 体积 < 60kb (gzip < 18kb)
  • 兼容 Android 4.4+ / iOS 9+
  • 更好的异步操作
  • 多线程 (WebWorker) 解析文件数据
  • OffscreenCanvas / ImageBitmap

差异:

  • 不支持播放 SVGA 1.x 格式
  • 不支持声音播放

首先我们使用前需要安装:cnpm i svga
在这里插入图片描述

简单使用:

html部分:

<template>
  <div class="bg">
    <canvas id="canvas" class="canvas"></canvas>
  </div>
</template>

ts部分:

<script lang="ts" setup>
import { Parser, Player } from 'svga'

const startSvga = async function () {
  const parser = new Parser()
  const svga = await parser.load('./src/assets/1.svga')

  const doc: any = document.getElementById('canvas')
  const player: any = new Player(doc)
  await player.mount(svga)

  player.onStart = () => console.log('播放了')

  // 开始播放动画
  player.start()
}
startSvga()
</script>

style部分:

<style scoped>
.bg {
  width: 100vw;
  height: 100vh;
  background-color: pink;
}
.canvas {
  width: 100%;
  height: auto;
}
</style>

效果图:
在这里插入图片描述
(动效图怕引起版权问题,就不展示了)

然后我们发现这样每次不管首次进入初始化还是刷新都需要重新下载,有一段页面空白时间,达不到我们要的效果。那我们就考虑到用DB来优化加载效果。

在这里插入图片描述
ts部分:

import { Parser, Player, DB } from 'svga'
import url from '../assets/1.svga?url'

const startSvga = async function () {
  try {
    const db = new DB()
    let svga = await db.find(url)
    if (!svga) {
      const parser = new Parser({ isDisableImageBitmapShim: true })
      svga = await parser.load(url)
      await db.insert(url, svga)
    }
    const doc: any = document.getElementById('canvas')
    const player: any = new Player(doc)
    await player.mount(svga)

    player.onStart = () => console.log('播放了')

    // 开始播放动画
    player.start()
  } catch (error) {
    console.error(error)
  }
}
startSvga()

对比:
在这里插入图片描述
在这里插入图片描述

之前是不管第一次进入还是刷新都需要重新加载解析动画,优化后,就可以减少相同 SVGA 下载和解析,页面渲染完成更快了。

完整代码:

<template>
  <div class="bg">
    <canvas id="canvas" class="canvas"></canvas>
  </div>
</template>

<script lang="ts" setup>
import { Parser, Player, DB } from 'svga'
import url from '../assets/1.svga?url'

const startSvga = async function () {
  try {
    const db = new DB()
    let svga = await db.find(url)
    if (!svga) {
      const parser = new Parser({ isDisableImageBitmapShim: true })
      svga = await parser.load(url)
      await db.insert(url, svga)
    }
    const doc: any = document.getElementById('canvas')
    const player: any = new Player(doc)
    await player.mount(svga)

    player.onStart = () => console.log('播放了')

    // 开始播放动画
    player.start()
  } catch (error) {
    console.error(error)
  }
}
startSvga()
</script>

<style scoped>
.bg {
  width: 100vw;
  height: 100vh;
  background-color: pink;
}
.canvas {
  width: 100%;
  height: auto;
}
</style>

最后贴上文档链接

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值