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实现self的resend
Jul 22 Javascript
JavaScript实现图片DIV竖向滑动的方法
Apr 25 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【二】
May 10 Javascript
VUE axios上传图片到七牛的实例代码
Jul 28 Javascript
Vue-cli 使用json server在本地模拟请求数据的示例代码
Nov 02 Javascript
Three.js加载外部模型的教程详解
Nov 10 Javascript
实例介绍JavaScript中多种组合继承
Jan 20 Javascript
如何利用ES6进行Promise封装总结
Feb 11 Javascript
jQuery模拟html下拉多选框的原生实现方法示例
May 30 jQuery
非常实用的jQuery代码段集锦【检测浏览器、滚动、复制、淡入淡出等】
Aug 08 jQuery
微信小程序 select 下拉框组件功能
Sep 09 Javascript
layui的layedit富文本赋值方法
Sep 18 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
xss防御之php利用httponly防xss攻击
2014/03/21 PHP
php获取字符串中各个字符出现次数的方法
2015/02/23 PHP
jquery.validate使用攻略 第三部
2010/07/01 Javascript
基于JQuery实现CheckBox全选全不选
2011/06/27 Javascript
在新窗口打开超链接的方法小结
2013/04/14 Javascript
JS中的数组的sort方法使用示例
2014/01/22 Javascript
javascript中使用new与不使用实例化对象的区别
2015/06/22 Javascript
BootStrap使用popover插件实现鼠标经过显示并保持显示框
2016/06/23 Javascript
微信小程序 122100版本更新问题解决方案
2016/12/22 Javascript
详解jQuery中的getAll()和cleanData()
2019/04/15 jQuery
axios实现简单文件上传功能
2019/09/25 Javascript
Vue中axios拦截器如何单独配置token
2019/12/27 Javascript
Vue路由管理器Vue-router的使用方法详解
2020/02/05 Javascript
JavaScript ES 模块的使用
2020/11/12 Javascript
python切换hosts文件代码示例
2013/12/31 Python
浅谈Django REST Framework限速
2017/12/12 Python
Python实现修改文件内容的方法分析
2018/03/25 Python
python实现嵌套列表平铺的两种方法
2018/11/08 Python
python查找重复图片并删除(图片去重)
2019/07/16 Python
python SVM 线性分类模型的实现
2019/07/19 Python
python支付宝支付示例详解
2019/08/22 Python
Python3+Appium安装及Appium模拟微信登录方法详解
2021/02/16 Python
h5网页水印SDK的实现代码示例
2019/02/19 HTML / CSS
罗技美国官网:Logitech美国
2020/01/22 全球购物
Linux内核产生并发的原因
2012/07/13 面试题
自我鉴定写作要点
2014/01/17 职场文书
对外汉语专业大学生职业生涯规划书
2014/10/11 职场文书
学雷锋倡议书
2015/01/19 职场文书
介绍长城的导游词
2015/01/30 职场文书
门卫岗位职责
2015/02/09 职场文书
总经理年会致辞
2015/07/29 职场文书
有关花店创业的计划书模板
2019/08/27 职场文书
python中的getter与setter你了解吗
2022/03/24 Python
frg-100简单操作(设置)说明
2022/04/05 无线电
Windows Server 2012 修改远程默认端口3389的方法
2022/04/28 Servers
java实现web实时消息推送的七种方案
2022/07/23 Java/Android