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


前言


一、CanvasKeyFrames 是什么?

用来做canvas动画的工具。

二、使用步骤

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

在这里插入图片描述

1.引入库

代码如下(示例):

在html中引入:

<script src="canvas-keyframes.js"></script>

或者使用npm引入

npm i canvaskeyframes

在main.js中引入

import CanvasKeyFrames from 'canvaskeyframes'

2.在组件中使用

<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.参数格式

{el [canvas容器,必须是DOM对象]type [图片模式,'array''sprite'模式,array是图片对象数组,sprite是基于宽度扩展的单张雪碧图]imgs [图片帧对象数组或单图,对应不同模式]options {cover: 10, //指定封面帧,默认是0fps: 30, //默认是24loop: 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() 销毁对象


总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/662242.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中国34省市区名字之来源

本文内容是笔者根据B站视频进行整理,视频内容由@顺丰快递曹子桓 @小玄学投稿。 北京 洪武二年,朱元璋得知捷报,改“大都路”为“北平府”,取“蓟北悉平”之意。 朱棣改北平府为顺天府,又赐京号——北京。 民国时,顺天府先被改为京兆地方,又被改为北平市。 新中国成立后…

源聚达科技:开一家抖音小店有没有风险

在数字化浪潮的推动下&#xff0c;抖音小店如雨后春笋般涌现&#xff0c;成为众多创业者眼中的香饽饽。然而&#xff0c;“盛名之下&#xff0c;其实难副”&#xff0c;开设一家抖音小店并非只有风光无限&#xff0c;其背后的风险也不容小觑。 首要的风险源自激烈的市场竞争。抖…

力扣之2629.复合函数(reduceRight )

/*** param {Function[]} functions* return {Function}*/ var compose function(functions) {return function(x) {return functions.reduceRight((result, func) > func(result), x);} };/*** const fn compose([x > x 1, x > 2 * x])* fn(4) // 9*/ 说明&#x…

大模型ReAct智能体开发实战

哆啦A梦是很多人都熟悉的角色&#xff0c;包括我自己。 在成长过程中&#xff0c;我常常对他口袋里的许多小玩意感到惊讶&#xff0c;而且他知道何时使用它们。 随着大型语言模型 (LLM) 的发展趋势&#xff0c;你也可以构建一个具有相同行为方式的模型&#xff01; 我们将构建…

Redis是单线程还是多线程?

Redis最初是设计为单线程的服务器&#xff0c;其核心处理命令请求的逻辑是单线程的&#xff0c;这使得Redis非常简单而高效。核心单线程的设计意味着它使用非阻塞I/O&#xff0c;并且按顺序处理所有操作&#xff0c;从而避免了锁和多线程的竞争条件。 然而&#xff0c;在最近的…

DHCP简介

定义 动态主机配置协议DHCP&#xff08;Dynamic Host Configuration Protocol&#xff09;是一种用于集中对用户IP地址进行动态管理和配置的技术。即使规模较小的网络&#xff0c;通过DHCP也可以使后续增加网络设备变得简单快捷。 DHCP是在BOOTP&#xff08;BOOTstrap Protoc…

组装2-4人后端服务团队,选择GO还是Java?

问题&#xff1a; 组装2-4人后端服务团队&#xff0c;选择GO还是Java&#xff1f; 背景&#xff1a; 原团队python背景&#xff0c;现新业务需要用到大数据的处理&#xff0c;而python并不适合。 原业务的发展本想渐进发展中部分大数据业务改用GO实现逻辑部分&#xff0c;但新…

mysql数据库学习记录(一)

文章目录 1.mysql如何加外键关联约束&#xff1f;2.mysql&#xff0c;加外键关联约束有什么作用&#xff1f;3.在MySQL中&#xff0c;可以通过在创建数据表时使用PRIMARY KEY关键字来指定多列联合主键&#xff0c;那么请问联合主键有啥作用&#xff1f;mysql数据表设计好后&…

linux 04 进程管理

02.进程管理 ps 在命令行输入ps后按回车键就能查看当前系统中正在运行的进程。 第一. 查看进程ps 进程的状态STAT 进程的周期 fork&#xff0c;产生一个新进程 第二.排序进程表 ps aux --sort -%cpu 降序cpu %cpu 增序cpu 第三.父子关系 ps ef 第四.自定义 五.动态查看…

Spring和SpringBoot的区别是什么

Spring 和 Spring Boot 是 Java 开发领域内两个极其重要且紧密相关的框架&#xff0c;它们各自在企业级应用开发中扮演着不同的角色&#xff0c;并带来了一系列革新性的变化。以下是关于两者之间主要区别的详细分析&#xff1a; 一、设计理念与定位 Spring Framework Spring 是…

如何远程登录云服务器?登录失败是什么原因?

我用Linux云服务器&#xff0c;遇到了有关远程登录的一些问题&#xff0c;于是搜索了一些资料&#xff0c;整理了一篇文档&#xff0c;作为记录。如果你也遇到过 相似的问题&#xff0c;欢迎一起探讨&#xff01; 一、Linux云服务器的远程登录 远程登陆linux&#xff0c;使用…

【Java 数据结构】排序

排序算法 1. 排序的概念及引用1.1 排序的概念1.2 常见的排序算法 2. 常见排序算法的实现2.1 插入排序2.1.1 直接插入排序2.1.2 希尔排序( 缩小增量排序 ) 2.2 选择排序2.2.1 直接选择排序2.2.2 堆排序 2.3 交换排序2.3.1冒泡排序2.3.2 快速排序2.3.3 快速排序非递归 2.4 归并排…

Pinterest是什么软件?有什么功能?Pinterest怎么做营销?

如今&#xff0c;社媒营销已成为连接品牌与全球消费者的关键桥梁。随着像Instagram、Twitter等海外社交媒体平台的兴起&#xff0c;社媒营销人员和跨境电商面临着无限的机遇。而在这些平台中&#xff0c;有一个平台以其独特的视觉展示方式和高度专注的用户体验脱颖而出——那就…

力扣hot100 无重复字符的最长子串 双指针 滑动窗口 哈希

Problem: 3. 无重复字符的最长子串 文章目录 思路Code 思路 &#x1f468;‍&#x1f3eb; 参考 Code ⏰ 时间复杂度: O ( n ) O(n) O(n) &#x1f30e; 空间复杂度: O ( 1 ) O(1) O(1) class Solution {public int lengthOfLongestSubstring(String s){if (s null ||…

HTML+CSS+JS的3D进度条

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>HTMLCSSJS的3D进度条</title><style>…

ios app与H5页面交互踩坑

ios 与 H5 页面交互是异步的&#xff0c;有坑 这两端的交互我这边写的如下&#xff1a; const platform 判断的平台 export const getIosData () > {let returnPromise;try {if (platform "android" ) {returnPromise Promise.resolve((window as any).androi…

【JAVA学习路线——超详细介绍】

JAVA学习路线——超详细介绍 1. 介绍2. Java基础知识3. Java进阶4. Java高级知识5. 开发工具和环境6. 涉猎相关技术7. 实战项目8. 持续学习和实践 1. 介绍 要成为一名熟练的Java开发者&#xff0c;需要经过系统的学习和实践&#xff0c;下面是一个详细的Java学习路线&#xff…

Sqoop数据迁移工具

概述 Apache Sqoop&#xff08;SQL-to-Hadoop&#xff09;项目旨在协助RDBMS与Hadoop之间进行高效的大数据交流。用户可以在 Sqoop 的帮助下&#xff0c;轻松地把关系型数据库的数据导入到 Hadoop 与其相关的系统 (如HBase和Hive)中&#xff1b;同时也可以把数据从 Hadoop 系统…

Android应用程序上线到Google Play商店

将Android应用程序上线到Google Play商店涉及多个步骤。以下一般的上线流程&#xff0c;具体的步骤可能会根据开发者的需求和Google Play的更新而有所变化。确保遵循Google Play的规定和最佳实践&#xff0c;以确保应用能够成功上线并为用户提供良好的体验。北京木奇移动技术有…

78SXX系列­——用于各种电视机、收录机、电子仪器、设备的稳压电源电路,输出电流大,内设过热、短路保护电路,无需外接元件

78SXX系列是用于各种电视机、收录机、电子仪器、设备的稳压电源电路。包括78S05、78S06、 78S08、 78S09、 78S10、 78S12、 78S15. 主要特点&#xff1a; ● 极限输出电流:0.2A ● 固定输出电压: 5V、 6V、 8V、9V、10V、 12V、 15V ● 内置短路保护电路 ● 内置热保护电路 ●…