更新记录

0.0.6(2025-09-26)

  • fix: 修复安卓打包的问题

0.0.5(2025-09-17)

  • fix: 修复ios打包问题

0.0.4(2025-08-31)

  • feat:兼容uniappx 鸿蒙next
查看更多

平台兼容性

uni-app x(4.74)

Chrome Safari Android iOS 鸿蒙 微信小程序
- - 5.0 -

lime-svga-x SVGA动画播放器

一个高性能的SVGA动画播放组件,用于展示SVGA格式的动画。支持远程/本地资源加载、精准动画控制、动态内容替换等功能,可用于展示复杂动画效果、交互反馈、引导页面等多种场景。组件提供了丰富的控制API,可以满足各种复杂的动画需求。

文档链接

📚 组件详细文档请访问以下站点:

安装方法

  1. 在uni-app插件市场中搜索并导入lime-svga-x
  2. 导入后在页面使用组件标签
  3. 使用自定义基座进行调试和预览
  4. 鸿蒙Next需要lime-svga配合,并且还需要源码版本

    特性

    • ✅ 原生性能渲染,高效流畅
    • ✅ 支持远程/本地 SVGA 资源加载
    • ✅ 精准动画控制(播放/暂停/跳帧)
    • ✅ 动态内容替换(文本/图片)
    • ✅ 循环模式与填充策略
    • ✅ 实时进度回调

代码演示

基础用法

最简单的SVGA播放器用法,只需设置资源地址并监听加载完成事件。

<template>
  <l-svga-x 
    ref="svgaPlayer"
    src="https://example.com/animation.svga"
    @loaded="onLoaded"
    @percentage="onPercentage"
  />
</template>
export default {
  methods: {
    onPercentage(progress) {
      console.log('当前播放进度:', progress)
    },
    onLoaded() {
      // uniappx
      (this.$refs.svgaPlayer as LSvgaXElement).startAnimation()
      // uniapp
      // this.$refs.svgaPlayer.startAnimation()
    }
  }
}

动态加载动画

通过方法动态加载新的SVGA资源。

<template>
  <l-svga-x ref="svgaPlayer" @loaded="onLoaded" />
  <button @click="loadNewAnimation">加载新动画</button>
</template>
export default {
  methods: {
    onLoaded() {
       // uniapp
       // this.$refs.svgaPlayer.startAnimation()
       // uniappx
       (this.$refs.svgaPlayer as LSvgaXElement).startAnimation()
    },
    loadNewAnimation() {
      // this.$refs.svgaPlayer.load('https://example.com/new-animation.svga')
    }
  }
}

循环播放设置

设置动画循环播放次数,0表示无限循环。

<template>
  <l-svga-x 
    ref="svgaPlayer"
    src="https://example.com/animation.svga"
    @loaded="onLoaded"
  />
  <button @click="setInfiniteLoop">设置无限循环</button>
  <button @click="setLoopCount">设置循环3次</button>
</template>
export default {
  methods: {
    onLoaded() {
      (this.$refs.svgaPlayer as LSvgaXElement).startAnimation()
    },
    setInfiniteLoop() {
      (this.$refs.svgaPlayer as LSvgaXElement).setLoops(0)
    },
    setLoopCount() {
      (this.$refs.svgaPlayer as LSvgaXElement).setLoops(3)
    }
  }
}

精确控制播放

通过跳帧或跳转到指定百分比位置来精确控制动画播放。

<template>
  <l-svga-x 
    ref="svgaPlayer"
    src="https://example.com/animation.svga"
    @loaded="onLoaded"
  />
  <button @click="jumpToMiddle">跳转到50%</button>
  <button @click="jumpToFrame">跳转到第10帧</button>
</template>
export default {
  methods: {
    onLoaded() {
      (this.$refs.svgaPlayer as LSvgaXElement).startAnimation()
    },
    jumpToMiddle() {
      (this.$refs.svgaPlayer as LSvgaXElement).stepToPercentage(50, true)
    },
    jumpToFrame() {
      (this.$refs.svgaPlayer as LSvgaXElement).stepToFrame(10, true)
    }
  }
}

动态内容替换

动态替换SVGA动画中的文本或图片内容。

<template>
  <l-svga-x 
    ref="svgaPlayer"
    src="https://example.com/animation.svga"
    @loaded="onLoaded"
  />
  <button @click="replaceText">替换文本</button>
  <button @click="replaceImage">替换图片</button>
</template>
export default {
  methods: {
    onLoaded() {
      (this.$refs.svgaPlayer as LSvgaXElement).startAnimation()
    },
    replaceText() {
      (this.$refs.svgaPlayer as LSvgaXElement).setText({ 
        text: "新文本内容", 
        color: "#FF0000" 
      }, "textLayer")
    },
    replaceImage() {
      (this.$refs.svgaPlayer as LSvgaXElement).setImage("/static/new-image.png", "imageLayer")
    }
  }
}

API文档

Props 属性说明

属性名 说明 类型 默认值
src SVGA资源地址,支持网络URL或本地路径 string ''

Events 事件

事件名 说明 回调参数
init 组件初始化完成时触发 -
loaded 资源加载成功时触发 {url, videoitem}
frame 每帧渲染时触发 当前帧数
finished 动画播放完成时触发(非循环模式) -
percentage 播放进度变化时触发 当前进度百分比

Methods 方法

通过 ref 获取组件实例后可以调用以下方法:

方法名 说明 参数
load 加载新的SVGA动画资源 url: string - 资源地址
startAnimation 开始播放动画 -
pauseAnimation 暂停播放动画 -
stopAnimation 停止并重置动画 -
setLoops 设置循环次数 count: number - 循环次数,0表示无限循环
stepToFrame 跳转到指定帧 frame: number - 目标帧
play: boolean - 是否继续播放
stepToPercentage 跳转到指定百分比位置 percent: number - 百分比值(0-100)
play: boolean - 是否继续播放
setText 动态替换文本内容 content: object - 文本对象
key: string - 元素标识
setImage 动态替换图片元素 src: string - 图片地址
key: string - 元素标识
setFillMode 设置填充模式 mode: string - 填充模式,如'forward'

文本替换参数

使用 setText 方法时,content 参数支持以下属性:

{
  text: "文本内容",    // 要显示的文本
  color: "#FF0000",   // 文本颜色
  size: 20,           // 文本大小
  family: "Arial"     // 字体
}

注意事项

  1. 组件需要在自定义基座中运行,请确保正确配置
  2. 动态内容替换功能需要SVGA文件中预先设置好对应的图层标识
  3. 在Android和iOS平台上可能存在细微的渲染差异
  4. 大型SVGA文件可能会占用较多内存,请合理控制文件大小

支持与赞赏

如果你觉得本插件解决了你的问题,可以考虑支持作者:

支付宝赞助 微信赞助

隐私、权限声明

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

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

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