js通过循环多张图片实现动画效果

前端之家收集整理的这篇文章主要介绍了js通过循环多张图片实现动画效果前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

本文实例为大家分享了js通过循环多张图片实现动画展示的具体代码,供大家参考,具体内容如下

以小鱼摇尾巴和眨眼睛为例

js通过循环多张图片实现动画效果


动画思路:

1.将图片资源放在数组里面

2.通过计时器来设定间隔时间

3.通过计数器来取相应的图片

第一步:基本框架,鱼身体

  1. <body>
  2. <canvas id="canvas1" width="800" height="600"></canvas>
  3. </body>
  1. document.body.onload = game;
  2.  
  3. var can1,ctx1,canWidth,canHeight,lastTime = Date.now(),deltaTime = 0,body = new Image();
  4.  
  5. function game() {
  6. init();
  7. gameloop();
  8. }
  9.  
  10. function init() {
  11. can1 = document.getElementById("canvas1"); //fonr--fishes,UI,circles,dust
  12. ctx1 = can1.getContext("2d");
  13. canWidth = can1.width;
  14. canHeight = can1.height;
  15.  
  16. body.src = './src/baby.png';
  17. }
  18.  
  19. function bodyDraw(){
  20. ctx1.drawImage( body,-body.width * 0.5,-body.height * 0.5);
  21. }
  22.  
  23. function gameloop() {
  24. requestAnimFrame(gameloop);
  25.  
  26. //时间帧间隔
  27. var now = Date.now();
  28. deltaTime = now - lastTime;
  29. lastTime = now;
  30.  
  31. ctx1.clearRect(0,canHeight);
  32.  
  33. bodyDraw();
  34. }
  35.  
  36. window.requestAnimFrame = (function() {
  37. return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame ||
  38. function( /* function FrameRequestCallback */ callback,/* DOMElement Element */ element) {
  39. return window.setTimeout(callback,1000 / 60);
  40. };
  41. })();

第二步:摇动尾巴

1.图片资源有8张,从tail0.png ~ tail7.png

2.尾巴是匀速的运动,间隔时间为固定值

  1. var bTailTimer,//计时器
  2. bTailCount,//计数器
  3. babyTail = []; //图片数组
  4.  
  5. function init() {
  6. //尾巴初始化
  7. bTailTimer = 0; 8 bTailCount = 0; 9 for (var i = 0; i < 8; i++) {
  8. babyTail[i] = new Image();
  9. babyTail[i].src = './src/tail' + i +'.png';
  10. }
  11. }
  12.  
  13. function tailDraw(){
  14. bTailTimer += deltaTime;
  15. if(bTailTimer > 50){
  16. bTailCount = (bTailCount + 1)% 8;
  17. bTailTimer %= 50; //初始化计数器
  18. }
  19. ctx1.drawImage( babyTail[bTailCount],-babyTail[bTailCount].width * 0.5,-babyTail[bTailCount].height * 0.5);
  20. }
  21.  
  22. function gameloop() {
  23. ctx1.clearRect(0,canHeight);
  24.  
  25. bodyDraw();
  26. tailDraw();
  27. }

第三步:眨眼睛

1.图片资源有2张,从eye0.png ~ eye7.png

2.眼睛睁开时间不定时,闭上时间固定值

  1. var bEyeTimer,bEyeCount,bEyeInterval,//时间间隔变量
  2. babyEye = [];
  3.  
  4. function init() {
  5. //眼睛初始化
  6. bEyeTimer = 0;
  7. bEyeCount = 0;
  8. bEyeInterval = 1000; //间隔时间
  9. for (var i = 0; i < 2; i++) {
  10. babyEye[i] = new Image();
  11. babyEye[i].src = './src/Eye' + i + '.png';
  12. }
  13. }
  14.  
  15. function eyeDraw() {
  16. bEyeTimer += deltaTime;
  17. if (bEyeTimer > bEyeInterval)
  18. {
  19. bEyeCount = (bEyeCount + 1)% 2;
  20. bEyeTimer %= bEyeInterval;
  21.  
  22. if (bEyeCount == 0)
  23. {
  24. //眼睛睁开保持的时间随机
  25. bEyeInterval = Math.random() * 1500 + 2000; //[2000,3500)
  26. } else
  27. {
  28. //眼睛闭上保持时间固定为100ms
  29. bEyeInterval = 100;
  30. }
  31. }
  32. }
  33.  
  34. function gameloop() {
  35. eyeDraw();
  36. }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

猜你在找的JavaScript相关文章