js通过循环多张图片实现动画效果
本文实例为大家分享了js通过循环多张图片实现动画展示的具体代码,供大家参考,具体内容如下
以小鱼摇尾巴和眨眼睛为例
动画思路:
1.将图片资源放在数组里面
2.通过计时器来设定间隔时间
3.通过计数器来取相应的图片
第一步:基本框架,鱼身体
document.body.onload=game;
varcan1,
ctx1,
canWidth,
canHeight,
lastTime=Date.now(),
deltaTime=0,
body=newImage();
functiongame(){
init();
gameloop();
}
functioninit(){
can1=document.getElementById("canvas1");//fonr--fishes,UI,circles,dust
ctx1=can1.getContext("2d");
canWidth=can1.width;
canHeight=can1.height;
body.src='./src/baby.png';
}
functionbodyDraw(){
ctx1.drawImage(body,-body.width*0.5,-body.height*0.5);
}
functiongameloop(){
requestAnimFrame(gameloop);
//时间帧间隔
varnow=Date.now();
deltaTime=now-lastTime;
lastTime=now;
ctx1.clearRect(0,0,canWidth,canHeight);
bodyDraw();
}
window.requestAnimFrame=(function(){
returnwindow.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||
function(/*functionFrameRequestCallback*/callback,/*DOMElementElement*/element){
returnwindow.setTimeout(callback,1000/60);
};
})();
第二步:摇动尾巴
1.图片资源有8张,从tail0.png~tail7.png
2.尾巴是匀速的运动,间隔时间为固定值
varbTailTimer,//计时器
bTailCount,//计数器
babyTail=[];//图片数组
functioninit(){
//尾巴初始化
bTailTimer=0;8bTailCount=0;9for(vari=0;i<8;i++){
babyTail[i]=newImage();
babyTail[i].src='./src/tail'+i+'.png';
}
}
functiontailDraw(){
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);
}
functiongameloop(){
ctx1.clearRect(0,0,canWidth,canHeight);
bodyDraw();
tailDraw();
}
第三步:眨眼睛
1.图片资源有2张,从eye0.png~eye7.png
2.眼睛睁开时间不定时,闭上时间固定值
varbEyeTimer,
bEyeCount,
bEyeInterval,//时间间隔变量
babyEye=[];
functioninit(){
//眼睛初始化
bEyeTimer=0;
bEyeCount=0;
bEyeInterval=1000;//间隔时间
for(vari=0;i<2;i++){
babyEye[i]=newImage();
babyEye[i].src='./src/Eye'+i+'.png';
}
}
functioneyeDraw(){
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;
}
}
}
functiongameloop(){
eyeDraw();
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。