小程序自动合成acss帧动画方案

1,508 阅读3分钟

我在最近的开发项目中发现,需要很多动画效果,目前来说有几个方案实现,

  • 1.使用apng gif等动图
  • 2.使用视频
  • 3.使用css帧动画。

每个方案在前面都不太完美。各有存在的意义,后面我会专门对比其中的情况。而本文,重点介绍acss动画方式。

此方式之前最大的问题是在ios下闪屏问题,还有就是图片过大加载的问题。

下面我总结出来的流程:

1.将多帧图片合成为一张雪碧图(一张雪碧图是能解决闪屏问题的)

2.将png图片压缩。最好是熊猫🐼压缩之类的处理

3.生成css文件,生成将每帧图片信息,播放时间等

4.引入图片,引入css,设置class,之后小程序就有动画效果了。不过还有下面几个问题。

5.rpx单位rem导致大的雪碧图片在播放帧动画时抖动问题需要解决

6.动画播放的控制、停止事件处理等比较麻烦

至此,小程序实现帧动画太难了o(╥﹏╥)o。

接下来才是正文。我们使用的是同样的底层原理(css 帧动画)。但是工具把前面很多事情都给你做了。

首先安装一个命令行工具:win+R 打开cmd, 输入命令: npm i -g sprite2css (注意这里带了 -g 全局安装命令)

安装成功后,你可以测试是否安装成功 sprite2css -h

能够正常显示此命令的帮助信息代表安装成功。

接下来,我们cd命令行进入 放有序列帧的文件夹(png的文件)目前命令只支持png序列帧

执行sprite2css命令即可,然后等待处理完成,在文件夹会出现一个acss文件

acss文件就是我们最终生成的帧动画的所有数据,图片被打包成base64存入其中,这种方式,不需要等待图片加载时间动画秒开,会占用小程序包大小。

接下来就是在小程序项目中使用这个文件了。

1.将文件复制到小程序页面中,本文这里放到了client/pages/anim-demo 页面的目录中,同时 anim-demo.acss中引入此文件

2.项目安装组件库依赖 gm-com

3.anim-demo.json 页面配置文件中引入动画组件anim

4.最后在 anim-demo.axml 使用组件,即可看到效果。

写到最最后,

引入组件的目的是解决帧动画的抖动问题,因为小程序使用rpx rem,在背景定位上使用rpx会出现计算的像素为小数,导致位置经常被四舍五入从而抖动。这里解决办法是组件内部始终使用px定位,但进行了一次rpx转换缩放,从而达到准确定位。另一个作用是封装 开始、结束等 常用事件 和 控制属性。