简洁轻量的SVGA动效

简洁轻量的SVGA动效

  1. 简介

SVGA是一种动画格式,可以兼容安卓、ios和web,可以实现很多复杂的动画,避免了canvas来实现动画时的卡顿优化问题

  1. 结合项目使用
    下载svgaplayerweb包
import SVGA from 'svgaplayerweb'

this.start = 'colorv/resource/ba27dd66524355aac0b5af17870977af.svga' // 不同动效路径
this.start1 = 'colorv/resource/ffa8dbf29bdf704612009aef085d10d4.svga' // 进场开始
    
componentDidMount() {
	this.setSvga(this.start1, 1)
}

// svga动效
setSvga = (src, count) => {
  let element = document.getElementById('banner')
  if (!element) return
  let player = new SVGA.Player('#' + element.id)
  let parser = new SVGA.Parser('#' + element.id) // 如果你需要支持 IE6+,那么必须把同样的选择器传给 Parser。
  parser.load(config.base_src + src, (videoItem) => {
    player.loops = count
    player.setVideoItem(videoItem)
    player.startAnimation()
    player.onFrame((i) => {
      if (i === 29 && count === 1) {
        this.setSvga(this.start, 5)
      }
    })
  })
}
render() {
	<div>
		<div className="banner" id="banner" style={{ zIndex: 99 }}>
		  // 背景图 动效会覆盖
          <img src={`${config.base_src}colorv/resource/1b9e446de47471cfaf9d25783b1cc0a1.png`} />
        </div>
	</div>
}
  1. 对应用法介绍
    loops | 循环次数( 数值或字符串数值)/‘loops’(默认循环)
    clearsAfterStop | 动画结束都是否清楚内容,注意,这里如果不设置 默认true
    setVideoItem | 需要获取load返回参数才能生效
    startAnimation | 开始动画
    pauseAnimation | 暂停动画
    stopAnimation | 停止动画
    clearsAfterStop | 是否清除结束后定帧(默认清除) 布尔类型,ture => 清除 false => 不清除
    stepToFrame(开始帧数, true) | 第二个值为true是从指定帧开始播放,第二个值为false时是停止在指定帧数
    onFrame | 通过这个函数知道当前动画是播放的第几帧,然后根据具体业务需求展示效果

  2. SVGA成本

    • SVGA目不支持种类:
    • 不支持复杂的矢量形状图层
    • AE自带的渐变、生成、描边、擦除…
    • 对设计工具原生动画不友好,对图片动画友好(适合映客礼物场景)
    • 导出工具开源

常用参数说明

SVGA.Player 用于控制动画的播放和停止

SVGA.Parser 用于加载远端或 Base64 动画,并转换成 VideoItem。

player方法详解:

startAnimation(reverse:boolean = false); -从零帧开始动画。
startAnimationWithRange(范围:{位置:数字,长度:数字},反向:布尔=假); -在[位置,位置+长度]帧范围内开始动画。
pauseAnimation(); -在当前帧上暂停动画。
stopAnimation(); -停止动画,在clearsAfterStop === true时清除内容
setContentMode(mode:“ Fill” |“ AspectFill” |“ AspectFit”); -特定比例模式
setClipsToBounds(clipsToBounds:boolean); -如果开箱即用,则剪辑。
明确(); -强制清除内容。
stepToFrame(frame:int,andPlay:Boolean); -停止到特定的帧,同时播放动画,而andPlay === true
stepToPercentage(percentage:float,andPlay:Boolean); -停止到特定百分比,同时播放动画,而andPlay === true
setImage(image:string,forKey:string,transform:[a,b,c,d,tx,ty]); -动态替换动画图像,变换是可选的,变换可以调整替换图像。
setText(text:string | {text:string,family:string,size:string,color:string,offset:{x:float,y:float}},forKey:string); -在动画图像上动态添加文本
clearDynamicObjects(); -清除所有动态对象
player回调详解:

onFinished(callback:()=> void):无效; -动画停止后调用。
onFrame(callback:(frame:number):void):void; -在渲染动画特定帧后调用。
onPercentage(回调:(百分比:数字):无效):无效; -渲染特定动画百分比后调用。
SVGA解析器:

您使用SVGA.Parser从远程或Base64字符串加载VideoItem。

只能加载跨域允许文件。

如果您希望从Base64或File加载资源,请以load(File)或交付load(‘data:svga/2.0;base64,xxxxxx’)。

所以不能使用本地的svga

解决办法:

1、上传到服务器上,远程访问

2、本地开启一个服务,然后引入(http://127.0.0.1:xxx/xxxx)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值