【CanvasKeyFrames - HTML5 Canvas 图片序列帧播放工具】


前言


一、CanvasKeyFrames 是什么?

用来做canvas动画的工具。

二、使用步骤

效果如图:上下波动的线条

1.引入库

代码如下(示例):

在html中引入:

javascript 复制代码
<script src="canvas-keyframes.js"></script>

或者使用npm引入

javascript 复制代码
npm i canvaskeyframes

在main.js中引入

javascript 复制代码
import CanvasKeyFrames from 'canvaskeyframes'

2.在组件中使用

javascript 复制代码
<template>
  <div>
    <div id="box"></div>
  </div>
</template>

<script>
import CanvasKeyFrames from "canvaskeyframes";
export default {
  data() {
    return {};
  },
  created() {},
  mounted() {
    this.init();
  },
  methods: {
    init() {
      let w = document.documentElement.clientWidth;
      let h = document.documentElement.clientHeight;
      let imgUrl = [];
        for (let i = 0; i < 150; i++) {
        let n = "";
        if (i < 10) {
          n = "0000" + i;
        }
        if ((i >= 10) & (i < 100)) {
          n = "000" + i;
        }
        if (i >= 100) {
          n = "00" + i;
        }

        let obj = {
          src:
            "https://gf2-cn.cdn.sunborngame.com/website/turbulence/sprites_index/wave_" +
            n +
            ".jpg",
        };
        imgUrl.push(obj);
      }
      let frameImgArr = [];
      for (let i in imgUrl) {
        const img = new Image();
        img.src = imgUrl[i].src;
        img.onload = () => {
          img.onload = null;
          frameImgArr[i] = img;
          if(i == imgUrl.length - 1) {
            let BOX = new CanvasKeyFrames(
              document.getElementById("box"),
              "array",
              frameImgArr,
              {
                fps: 40,
                loop: "infinite",
                width: w, //注意,隐藏元素是拿不到宽度的,所以特殊情况下需要指定宽度
                height: h,
              }
            );
            BOX.play();
          }
        };
      }
    },
  },
};
</script>

<style lang="scss" scoped>
#box {
  width: 100vw;
  height: 100vh;
}
</style>

3.参数格式

javascript 复制代码
{
	el [canvas容器,必须是DOM对象]
	type [图片模式,'array'和 'sprite'模式,array是图片对象数组,sprite是基于宽度扩展的单张雪碧图]
	imgs [图片帧对象数组或单图,对应不同模式]
	options {
		cover: 10, //指定封面帧,默认是0
		fps: 30, //默认是24
		loop: 10 //初始化默认的循环次数,可以手动设置大于等于1的整数。在formTo中可以设置。默认是infinite。
		width: 300, //注意,隐藏元素是拿不到宽度的,所以特殊情况下需要指定宽度
		height: 300,
		_iw: 300, // 雪碧图中单个图片的宽度
		_ih: 300, // 雪碧图中单个图片的高度
		framesCount: 10 // 雪碧图帧数
	}
}

API

CanvasKeyFrames(el, type, imgs, options)

  • el canvas容器,必须是DOM对象
  • type 图片模式,'array'和 'sprite'模式,array是图片对象数组,sprite是基于宽度扩展的单张雪碧图
  • imgs 图片帧对象数组或单图,对应不同模式
  • options
    • List item
    • cover 指定封面帧,默认是0
    • fps 默认是24
    • loop 初始化默认的循环次数,可以手动设置大于等于1的整数。在formTo中可以设置。默认是infinite。
    • width 隐藏元素是拿不到宽度的,所以特殊情况下需要指定宽度
    • height 隐藏元素是拿不到宽度的,所以特殊情况下需要指定宽度
    • _iw 雪碧图中单个图片的宽度
    • _ih 雪碧图中单个图片的高度
    • framesCount 雪碧图帧数

方法介绍

goto(n) 跳转到某一帧
next() 下一帧
prev() 上一帧
fromTo(from, to, loop, callback)

from 启始帧(从0开始) to 结束帧数 loop 循环次数,默认是infiniten callback 回调函数
toFrom(to, from, loop, callback)

to 启始帧(从高位开始) from 结束帧数(从低位结束) loop 循环次数,默认是infiniten callback 回调函数
repeatplay(from, to, loop, callback)

fromto正着播一遍,然后回调fromBack,倒着播一遍,然后再回调toBack,进行逻辑判断 from 启始帧(从0开始) to 结束帧数 loop 循环次数,默认是infinite正播过去,再倒播回来 callback 回调函数
from(from, loop, callback)

from 启始帧(从0开始) loop 循环次数,默认是infinite callback 回调函数
to(to, loop, callback)

to 结束帧数 loop 循环次数,默认是infinite callback 回调函数
pause() 暂停动画
stop() 停止并回到第一帧或cover帧
play() 从当前位置播放动画,会继承上次使用fromTo、form或to的属性
destroy() 销毁对象


总结

如有有什么问题,请评论区留言。

相关推荐
Csvn16 小时前
Vue3 响应式与编译:依赖收集如何升级为节点级靶向更新
前端
星栈17 小时前
pnpm 12 升级实测
前端·javascript
Sirens.18 小时前
Java并发锁详解:六类锁策略与 synchronized 底层原理
java·前端·算法
特创数字科技19 小时前
一个纯本地运行的图片处理工具:压缩 / 裁剪 / 九宫格 / 圆角 / 滤镜 / 拼图 / 水印,终生使用
前端
IT_陈寒20 小时前
Vue的v-if和v-for混用居然是个天坑
前端·人工智能·后端
天衍四九-20 小时前
【无标题】
前端·spring boot·mysql·nginx·docker
广州华水科技20 小时前
2026年单北斗GNSS变形监测系统推荐榜单,解锁GNSS位移监测新高度
前端
xcyxiner20 小时前
DicomViewer24 修复编译bug(window test 失败)
前端·qt
linux_cfan20 小时前
videojs v10 源代码系列解读:34 · `createComposition`:类型安全的冲突检测
前端·安全