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中关于break,continue的特殊用法与介绍
May 24 Javascript
浅析hasOwnProperty方法的应用
Nov 20 Javascript
JavaScript中诡异的delete操作符
Mar 12 Javascript
JavaScript检测鼠标移动方向的方法
May 22 Javascript
简介JavaScript中的setDate()方法的使用
Jun 11 Javascript
jquery实现可旋转可拖拽的文字效果代码
Jan 27 Javascript
Angular表单验证实例详解
Oct 20 Javascript
JS中BOM相关知识点总结(必看篇)
Nov 22 Javascript
DataTables添加额外的查询参数和删除columns等无用参数实例
Jul 04 Javascript
把JavaScript代码改成ES6语法不完全指南(分享)
Sep 10 Javascript
微信小程序image图片加载完成监听
Aug 31 Javascript
layui 上传插件 带预览 非自动上传功能的实例(非常实用)
Sep 23 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基础陷阱题(变量赋值)
2012/09/12 PHP
php5对象复制、clone、浅复制与深复制实例详解
2019/08/14 PHP
js实现运行代码需要刷新的解决方法
2007/08/18 Javascript
JQuery 使用attr方法实现下拉列表选中
2014/10/13 Javascript
node.js中的http.createServer方法使用说明
2014/12/14 Javascript
JavaScript中的各种操作符使用总结
2016/05/26 Javascript
[原创]javascript typeof id==='string'?document.getElementById(id):id解释
2016/11/02 Javascript
jQuery checkbox选中问题之prop与attr注意点分析
2016/11/15 Javascript
前端主流框架vue学习笔记第一篇
2017/07/26 Javascript
node thread.sleep实现示例
2018/06/20 Javascript
d3.js实现图形拖拽
2019/12/19 Javascript
Python使用xlwt模块操作Excel的方法详解
2018/03/27 Python
Diango + uwsgi + nginx项目部署的全过程(可外网访问)
2018/04/22 Python
python 查找文件名包含指定字符串的方法
2018/06/05 Python
Python之用户输入的实例
2018/06/22 Python
python 解决cv2绘制中文乱码问题
2019/12/23 Python
使用PyOpenGL绘制三维坐标系实例
2019/12/24 Python
python基于opencv检测程序运行效率
2019/12/28 Python
python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解
2021/01/26 Python
Mavi牛仔裤美国官网:土耳其著名牛仔品牌
2016/09/24 全球购物
Java方面的关于数组和继承的笔面试题
2015/09/18 面试题
销售高级职员求职信
2013/10/29 职场文书
大学毕业感言
2014/01/10 职场文书
上级检查欢迎词
2014/01/18 职场文书
小学学校评估方案
2014/06/08 职场文书
同意迁入证明模板
2014/10/26 职场文书
教师年度考核个人总结
2015/02/12 职场文书
2015年大学生入党自荐书
2015/03/24 职场文书
简爱电影观后感
2015/06/10 职场文书
贫困证明怎么写
2015/06/16 职场文书
学生会任命书范本
2015/09/21 职场文书
HTML+CSS制作心跳特效的实现
2021/05/26 HTML / CSS
python基础之文件操作
2021/10/24 Python
使用jpa之动态插入与修改(重写save)
2021/11/23 Java/Android
Oracle使用别名的好处
2022/04/19 Oracle
mysql查找连续出现n次以上的数字
2022/05/11 MySQL