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 相关文章推荐
js、css、img等浏览器缓存问题的2种解决方案
Oct 23 Javascript
jQuery插件实现表格隔行变色及鼠标滑过高亮显示效果代码
Feb 25 Javascript
ichart.js绘制虚线、平均分虚线效果的实现代码
May 05 Javascript
Adapter适配器模式在JavaScript设计模式编程中的运用分析
May 18 Javascript
详解百度百科目录导航树小插件
Jan 08 Javascript
深入浅析Node.js单线程模型
Jul 10 Javascript
基于JavaScript实现无限加载瀑布流
Jul 21 Javascript
vue-cli3搭建项目的详细步骤
Dec 05 Javascript
微信头像地址失效踩坑记附带解决方案
Sep 23 Javascript
Js实现复选框的全选、全不选反选功能代码实例
Feb 28 Javascript
写给新手同学的vuex快速上手指北小结
Apr 14 Javascript
vue实现移动端触屏拖拽功能
Aug 21 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
自动分页的不完整解决方案
2007/01/12 PHP
php 常用类整理
2009/12/23 PHP
利用Ffmpeg获得flv视频缩略图和视频时间的代码
2011/09/15 PHP
php使用curl出现Expect:100-continue解决方法
2015/03/03 PHP
javascript prototype原型操作笔记
2009/12/07 Javascript
JavaScript高级程序设计(第3版)学习笔记7 js函数(上)
2012/10/11 Javascript
两种方法实现文本框输入内容提示消失
2013/03/17 Javascript
JS正则表达式获取分组内容的方法详解
2013/11/15 Javascript
详谈jQuery操纵DOM元素属性 attr()和removeAtrr()方法
2015/01/22 Javascript
jQuery实现提示密码强度的代码
2015/07/15 Javascript
Jquery全屏相册插件zoomvisualizer具有调节放大与缩小功能
2015/11/02 Javascript
JavaScript函数柯里化详解
2016/04/29 Javascript
JavaScript面向对象分层思维全面解析
2016/11/22 Javascript
JavaScript仿微博输入框效果(案例分析)
2016/12/06 Javascript
React组件的三种写法总结
2017/01/12 Javascript
详解在Vue中如何使用axios跨域访问数据
2017/07/07 Javascript
vue2.0学习之axios的封装与vuex介绍
2018/05/28 Javascript
十分钟教你上手ES2020新特性
2020/02/12 Javascript
[01:20]辉夜杯背景故事宣传片《辉夜传说》
2015/12/25 DOTA
python执行等待程序直到第二天零点的方法
2015/04/23 Python
Python线程指南详细介绍
2017/01/05 Python
Python3 模块、包调用&amp;路径详解
2017/10/25 Python
Python 给某个文件名添加时间戳的方法
2018/10/16 Python
对numpy中的where方法嵌套使用详解
2018/10/31 Python
Python Pandas 箱线图的实现
2019/07/23 Python
python使用paramiko模块通过ssh2协议对交换机进行配置的方法
2019/07/25 Python
CSS3按钮鼠标悬浮实现光圈效果源码
2016/09/11 HTML / CSS
松下电器美国官方商店:Panasonic美国
2016/10/14 全球购物
澳大利亚电子产品购物网站:Dick Smith
2017/02/02 全球购物
2014年采购工作总结
2014/11/20 职场文书
2015年人事科工作总结
2015/04/28 职场文书
应届生们该怎么书写求职信?
2019/07/05 职场文书
python数据库批量插入数据的实现(executemany的使用)
2021/04/30 Python
分享几种python 变量合并方法
2022/03/20 Python
JavaScript实现一键复制内容剪贴板
2022/07/23 Javascript
mysql序号rownum行号实现方式
2022/12/24 MySQL