js通过循环多张图片实现动画效果


Posted in Javascript onDecember 19, 2019

本文实例为大家分享了js通过循环多张图片实现动画展示的具体代码,供大家参考,具体内容如下

以小鱼摇尾巴和眨眼睛为例

js通过循环多张图片实现动画效果

动画思路:

1.将图片资源放在数组里面

2.通过计时器来设定间隔时间

3.通过计数器来取相应的图片 

第一步:基本框架,鱼身体

<body>
 <canvas id="canvas1" width="800" height="600"></canvas>
</body>
document.body.onload = game;

var can1,
 ctx1,
 canWidth,
 canHeight,
 lastTime = Date.now(),
 deltaTime = 0,
 body = new Image();



function game() {
 init();
 gameloop();
}

function init() { 
 can1 = document.getElementById("canvas1"); //fonr--fishes, UI, circles, dust
 ctx1 = can1.getContext("2d"); 
 canWidth = can1.width;
 canHeight = can1.height;

 body.src = './src/baby.png';
}

function bodyDraw(){
 ctx1.drawImage( body, -body.width * 0.5, -body.height * 0.5);
}

function gameloop() {
 requestAnimFrame(gameloop);

 //时间帧间隔
 var now = Date.now();
 deltaTime = now - lastTime; 
 lastTime = now;

 ctx1.clearRect(0, 0, canWidth, canHeight); 
 
 bodyDraw();
 }



 window.requestAnimFrame = (function() {
 return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame ||
  function( /* function FrameRequestCallback */ callback, /* DOMElement Element */ element) {
   return window.setTimeout(callback, 1000 / 60);
  };
})();

第二步:摇动尾巴

1.图片资源有8张,从tail0.png ~ tail7.png

2.尾巴是匀速的运动,间隔时间为固定值

var bTailTimer, //计时器
 bTailCount, //计数器
 babyTail = []; //图片数组

function init() { 
//尾巴初始化
 bTailTimer = 0; 8  bTailCount = 0; 9  for (var i = 0; i < 8; i++) {
  babyTail[i] = new Image();
  babyTail[i].src = './src/tail' + i +'.png';
 }
}

function tailDraw(){
 bTailTimer += deltaTime;
 if(bTailTimer > 50){
  bTailCount = (bTailCount + 1)% 8;
  bTailTimer %= 50; //初始化计数器
 }
 ctx1.drawImage( babyTail[bTailCount], -babyTail[bTailCount].width * 0.5, -babyTail[bTailCount].height * 0.5);
}

function gameloop() {
 ctx1.clearRect(0, 0, canWidth, canHeight); 

 bodyDraw();
 tailDraw();
 }

第三步:眨眼睛

1.图片资源有2张,从eye0.png ~ eye7.png

2.眼睛睁开时间不定时,闭上时间固定值

var bEyeTimer,
 bEyeCount,
 bEyeInterval, //时间间隔变量
 babyEye = [];

function init() { 
//眼睛初始化
 bEyeTimer = 0;
 bEyeCount = 0;
 bEyeInterval = 1000; //间隔时间
 for (var i = 0; i < 2; i++) {
  babyEye[i] = new Image();
  babyEye[i].src = './src/Eye' + i + '.png';
 }
}

function eyeDraw() {
 bEyeTimer += deltaTime;
 if (bEyeTimer > bEyeInterval) 
 {
  bEyeCount = (bEyeCount + 1)% 2;
  bEyeTimer %= bEyeInterval;

  if (bEyeCount == 0) 
  {
   //眼睛睁开保持的时间随机
   bEyeInterval = Math.random() * 1500 + 2000; //[2000,3500)
  } else 
  {
   //眼睛闭上保持时间固定为100ms
   bEyeInterval = 100;
  }
 }
}

function gameloop() {
eyeDraw();
 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 获取select下拉列表值的代码
Sep 07 Javascript
jquery中防刷IP流量软件影响统计的一点对策
Jul 10 Javascript
javascript中onclick(this)用法介绍
Apr 19 Javascript
js实现浏览器的各种菜单命令比如打印、查看源文件等等
Oct 24 Javascript
jquery插件jquery倒计时插件分享
Dec 27 Javascript
jQuery 如何先创建、再修改、后添加DOM元素
May 20 Javascript
jquery.form.js实现将form提交转为ajax方式提交的方法
Apr 07 Javascript
js实现简洁大方的二级下拉菜单效果代码
Sep 01 Javascript
基于jQuery的AJAX和JSON实现纯html数据模板
Aug 09 Javascript
JS解决position:sticky的兼容性问题的方法
Oct 17 Javascript
200行HTML+JavaScript实现年会抽奖程序
Jan 22 Javascript
创建与框架无关的JavaScript插件
Dec 01 Javascript
JS实现水平移动与垂直移动动画
Dec 19 #Javascript
5分钟快速看懂ES6中的反射与代理
Dec 19 #Javascript
d3.js实现图形拖拽
Dec 19 #Javascript
d3.js实现图形缩放平移
Dec 19 #Javascript
微信小程序批量上传图片到七牛(推荐)
Dec 19 #Javascript
echarts实现折线图的拖拽效果
Dec 19 #Javascript
Vue中使用Lodop插件实现打印功能的简单方法
Dec 19 #Javascript
You might like
用PHP函数解决SQL injection
2006/10/09 PHP
php下使用SimpleXML 处理XML 文件
2010/02/27 PHP
thinkphp3.0 模板中函数的使用
2012/11/13 PHP
php简单操作mysql数据库的类
2015/04/16 PHP
php格式化json函数示例代码
2016/05/12 PHP
PHP入门教程之正则表达式基本用法实例详解(正则匹配,搜索,分割等)
2016/09/11 PHP
关于firefox的ElementTraversal 接口 使用说明
2010/11/11 Javascript
实例代码详解javascript实现窗口抖动及qq窗口抖动
2016/01/04 Javascript
莱鸟介绍window.print()方法
2016/01/06 Javascript
jQuery获取attr()与prop()属性值的方法及区别介绍
2016/07/06 Javascript
BootStrap 轮播插件(carousel)支持左右手势滑动的方法(三种)
2016/07/07 Javascript
JavaScript数据结构之二叉树的删除算法示例
2017/04/13 Javascript
详解基于webpack2.x的vue2.x的多页面站点
2017/08/21 Javascript
bootstrap 弹出框modal添加垂直方向滚轴效果
2018/07/09 Javascript
js基础之事件捕获与冒泡原理
2019/10/09 Javascript
在Vue mounted方法中使用data变量详解
2019/11/05 Javascript
nodejs nedb 封装库与使用方法示例
2020/02/06 NodeJs
基于javascript实现移动端轮播图效果
2020/12/21 Javascript
[01:57]2018年度DOTA2最具潜力解说-完美盛典
2018/12/16 DOTA
[01:00:14]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第二场 2月28日
2021/03/11 DOTA
Python数据结构之栈、队列的实现代码分享
2017/12/04 Python
详解python里的命名规范
2018/07/16 Python
python 实现对文件夹中的图像连续重命名方法
2018/10/25 Python
Python字符串及文本模式方法详解
2020/09/10 Python
python实现数据结构中双向循环链表操作的示例
2020/10/09 Python
奥地利汽车配件店:Pkwteile.at
2017/03/10 全球购物
MIXIT官网:俄罗斯最大的化妆品公司之一
2020/01/25 全球购物
北京某公司的.net笔试题
2014/03/20 面试题
工商管理专业学生的自我评价
2013/10/01 职场文书
师德建设实施方案
2014/03/21 职场文书
计算机专业毕业生求职信
2014/04/30 职场文书
党员个人剖析材料
2014/09/30 职场文书
python实现简单的名片管理系统
2021/04/26 Python
python opencv检测直线 cv2.HoughLinesP的实现
2021/06/18 Python
浅谈mysql哪些情况会导致索引失效
2021/11/20 MySQL
MySQL下载安装配置详细教程 附下载资源
2022/09/23 MySQL