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 相关文章推荐
通过MSXML2自动获取QQ个人头像及在线情况(给初学者)
Jan 22 Javascript
jquery滚动组件(vticker.js)实现页面动态数据的滚动效果
Jul 03 Javascript
JS实现判断滚动条滚到页面底部并执行事件的方法
Dec 18 Javascript
jQuery创建DOM元素实例解析
Jan 19 Javascript
js如何打印object对象
Oct 16 Javascript
JavaScript中eval函数的问题
Jan 31 Javascript
JavaScript实现旋转轮播图
Aug 18 Javascript
vue项目中的webpack-dev-sever配置方法
Dec 14 Javascript
Vue实现todolist删除功能
Jun 26 Javascript
React之PureComponent的使用作用
Jul 10 Javascript
vue router 用户登陆功能的实例代码
Apr 24 Javascript
详解 TypeScript 枚举类型
Nov 02 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
phplot生成图片类用法详解
2015/01/06 PHP
JS动画效果代码3
2008/04/03 Javascript
jQuery中 noConflict() 方法使用
2013/04/25 Javascript
js浮动图片的动态效果
2013/07/10 Javascript
Web表单提交之disabled问题js解决方法
2015/01/13 Javascript
JavaScript实现打字效果的方法
2015/07/10 Javascript
JS实现为排序好的字符串找出重复行的方法
2016/03/02 Javascript
数组Array的一些方法(总结)
2017/02/17 Javascript
[js高手之路]原型式继承与寄生式继承详解
2017/08/28 Javascript
原生JS实现循环Nodelist Dom列表的4种方式示例
2018/02/11 Javascript
详解微信小程序框架wepy踩坑记录(与vue对比)
2019/03/12 Javascript
js实现随机8位验证码
2020/07/24 Javascript
layui监听单元格编辑前后交互的例子
2019/09/16 Javascript
基于Vue sessionStorage实现保留搜索框搜索内容
2020/06/01 Javascript
Python中用字符串调用函数或方法示例代码
2017/08/04 Python
Python代码实现删除一个list里面重复元素的方法
2019/04/02 Python
为什么你还不懂得怎么使用Python协程
2019/05/13 Python
Python 实现取多维数组第n维的前几位
2019/11/26 Python
使用SimpleITK读取和保存NIfTI/DICOM文件实例
2020/07/01 Python
Pytorch实验常用代码段汇总
2020/11/19 Python
Django web自定义通用权限控制实现方法
2020/11/24 Python
在IE6系列等老式浏览器中使用HTML5的新标签实现方案
2012/12/25 HTML / CSS
植村秀加拿大官网:Shu Uemura加拿大
2019/09/03 全球购物
如何判断计算机可能已经中马
2013/03/22 面试题
通用求职信范文模板分享
2013/12/27 职场文书
外贸专业求职信
2014/03/09 职场文书
科长竞争上岗演讲稿
2014/05/12 职场文书
学校火灾防控方案
2014/06/09 职场文书
校运动会广播稿(100篇)
2014/09/12 职场文书
税务会计岗位职责
2015/04/02 职场文书
长江七号观后感
2015/06/11 职场文书
党性教育心得体会(共6篇)
2016/01/21 职场文书
2019关于实习生工作安排及待遇的管理方案!
2019/07/16 职场文书
MySQL快速插入一亿测试数据
2021/06/23 MySQL
详解在OpenCV中如何使用图像像素
2022/03/03 Python
css样式important规则的正确使用方式
2022/06/10 HTML / CSS