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 相关文章推荐
SharePoint 客户端对象模型 (一) ECMA Script
May 22 Javascript
JS上传前预览图片实例
Mar 25 Javascript
js showModalDialog参数的使用详解
Jan 07 Javascript
js阻止事件追加的具体实现
Oct 15 Javascript
做web开发 先学JavaScript
Dec 12 Javascript
Javascript数组Array方法解读
Mar 13 Javascript
拥有一个属于自己的javascript表单验证插件
Mar 24 Javascript
es6的数字处理的方法(5个)
Mar 16 Javascript
JavaScript对象的特性与实践应用深入详解
Dec 30 Javascript
详解写好JS条件语句的5条守则
Feb 28 Javascript
解决vue 表格table列求和的问题
Nov 06 Javascript
Element中Slider滑块的具体使用
Jul 29 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图片上传程序
2008/03/27 PHP
php下统计用户在线时间的一种尝试
2010/08/26 PHP
PHP新手NOTICE错误常见解决方法
2011/12/07 PHP
laravel与thinkphp之间的区别与优缺点
2021/03/02 PHP
JS在IE和FireFox之间常用函数的区别小结
2010/03/12 Javascript
javascript的alert box在java中如何显示多行
2014/05/18 Javascript
input:checkbox多选框实现单选效果跟radio一样
2014/06/16 Javascript
实例详解angularjs和ajax的结合使用
2015/10/22 Javascript
小巧强大的jquery layer弹窗弹层插件
2015/12/06 Javascript
jQuery插件Validate实现自定义校验结果样式
2016/01/18 Javascript
浅谈jQuery效果函数
2016/09/16 Javascript
Vue.js实战之组件之间的数据传递
2017/04/01 Javascript
javascript兼容性(实例讲解)
2017/08/15 Javascript
基于JS抓取某高校附近共享单车位置 使用web方式展示位置变化代码实例
2019/08/27 Javascript
layui table 列宽百分比显示的实现方法
2019/09/28 Javascript
vue中实现点击空白区域关闭弹窗的两种方法
2020/12/30 Vue.js
[02:45]DOTA2英雄基础教程 伐木机
2013/12/23 DOTA
[58:32]EG vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python第三方库的安装方法总结
2016/06/06 Python
spark dataframe 将一列展开,把该列所有值都变成新列的方法
2019/01/29 Python
python实现计算器功能
2019/10/31 Python
在python中创建指定大小的多维数组方式
2019/11/28 Python
完美解决keras保存好的model不能成功加载问题
2020/06/11 Python
python名片管理系统开发
2020/06/18 Python
python在协程中增加任务实例操作
2021/02/28 Python
如何利用input事件来监听移动端的输入
2016/04/15 HTML / CSS
商务专员岗位职责
2013/11/23 职场文书
大学生党员自我批评
2014/02/14 职场文书
二年级班级文化建设方案
2014/05/10 职场文书
拔河比赛口号
2014/06/10 职场文书
故宫的导游词
2015/01/31 职场文书
《曹冲称象》教学反思
2016/02/20 职场文书
工作自我评价范文
2019/03/21 职场文书
2019请假条的基本格式及范文!
2019/07/05 职场文书
Python深度学习之Pytorch初步使用
2021/05/20 Python
css中:last-child不生效的解决方法
2022/08/05 HTML / CSS