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

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

动画思路:

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

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

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

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

<body>
    <canvas id="canvas1" width="800" height="600"></canvas>
</body>

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

第二步:摇动尾巴

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++) {
10         babyTail[i] = new Image();
11         babyTail[i].src = ‘./src/tail‘ + i +‘.png‘;
12     }
13 }
14
15 function tailDraw(){
16     bTailTimer += deltaTime;
17     if(bTailTimer > 50){
18         bTailCount = (bTailCount + 1)% 8;
19         bTailTimer %= 50; //初始化计数器
20     }
21     ctx1.drawImage( babyTail[bTailCount], -babyTail[bTailCount].width * 0.5, -babyTail[bTailCount].height * 0.5);
22 }
23
24 function gameloop() {
25  ctx1.clearRect(0, 0, canWidth, canHeight);
26
27     bodyDraw();
28     tailDraw();
29  }

第二步:眨眼睛

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

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

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

js通过循环多张图片实现动画效果的相关文章

Bounce.js – 快速创建漂亮的 CSS3 动画效果

Bounce.js 是一个用于制作漂亮的 CSS3 关键帧动画的 JavaScript 库,使用其特有的方式生成的动画效果.只需添加一个组件,选择预设,然后你就可以得到一个短网址或者导出为 CSS 代码. 您可能感兴趣的相关文章 太赞了!超炫的页面切换动画效果[附源码下载] 创意无限!一组网页边栏过渡动画[附源码下载] 好东西!动感的页面加载动画效果[附源码下载] 使用 CSS3 实现3D图片滑块效果[附源码下载] 时尚设计!三种奇特网格加载效果[附源码下载] 源码下载      在线演示 本文

Three.js纹理贴图正方体旋转动画效果

在线演示 使用three.js生成的正方体选装3D效果. 推荐使用chrome等现代浏览器观看(需要支持webGL) 如果大家对three.js 3D类库比较敢兴趣,请访问以下课程库: Javascript 3D类库three.js基础入门介绍 相关代码: var scene = new THREE.Scene(); var camera = new THREE.PerspectiveCamera(90, //vertical field of view (from bottom to top)

首页3张图片有动画效果

.h #import <UIKit/UIKit.h> @interface RootViewController : UIViewController { NSTimer *timer; UIImageView *imageView1; UIImageView *imageView2; UIImageView *imageView3; UIView * view1; UIView * view2; UIView * view3; } @end .m - (void)viewDidLoad {

利用 :before :after伪类实现鼠标悬浮动画效果

1.最近在逛网站的时候,想找一下喜欢的鼠标悬浮效果,避免广告的嫌疑,直接放图了: 2.在实现的时候,如果在直接使用鼠标hover ,transform,进行过渡,不能达到想要的效果,因为同时只能触发一张图片的动画效果,鼠标一旦离开了图层,就会回到原始位置. 也就是说,要实现这样的效果,需要鼠标放在某一个块状区域,同时触发两个选择器,这样的效果如果使用css实现的话,只能使用伪类:before, :after实现. 3.直接上代码 HTML <div id="meizu1">

详解用CSS3制作圆形滚动进度条动画效果

内  容 先看一下效果图,会提升我们的学习兴趣哟: 对于圆形效果是重点,我将详细讲解. 第一种效果: html结构: <div id="progress"> <span></span> </div> css样式: #progress{ width: 50%; height: 30px; border:1px solid #ccc; border-radius: 15px; margin: 50px 0 0 100px; overflow:

Tween.js 动画效果

一.apply,和call的用法. 先来一个与本次博文无关的东西,就是apply和call的用法.其实apply和call的用法都一样,只是他们的传参不一样.apply是数组,而call是单独的传,类似枚举. 1.列子一把arguments转化为标准数组,可以使用push等方法. function test(){ //arguments.push(5); //arguments.push is not a function console.log(arguments) var arg = Arr

JS DOM编程艺术——用JS实现动画效果—— JS学习笔记2015-7-21(第88天)

moveElement函数 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>用定时器实现JS动画效果</title> <style> </style> </head> <body> <

tween.js的动画效果

实现动画可以用好多种的方法,今天来看看用tween.js插件是如何实现动画效果的.  tween.js的使用 1.下载 2.引入 3.使用tween.js语法 需要哪些条件来做运动 1.初始位置 2.目标点 缓动函数 1.linear 匀速 2.Quad 二次方缓动效果 3.Cubic 三次方缓动效果 4.Quart 四次方缓动效果 5.Quint 五次方缓动效果 6.Sine  正弦缓动效果 7.Expo  指数缓动效果 8.Circ  圆形缓动函数 9.Elastic 指数衰减正弦曲线缓动函

JavaScript之JS实现动画效果

在前面的随笔中介绍了如何用DOM技术修改文档的央样式信息,用JavaScript添加样式信息可以节约我们的时间和精力,但总的来说,CSS仍是完成这类任务的最佳工具.但是有一个应用领域是目前的CSS无能为力的.如果我们想随着时间的变化而不断改变某个元素的样式,则只能用JavaScript.JavaScript能够按照预定的时间间隔重复的调用一个函数,而意味着我们可以随着时间的推移而不断改变某个元素的样式. 动画是样式随着时间变化的完美例子之一.简单的说,动画就是让元素的位置随着时间而不断的发生变化