var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var cw=canvas.width;
var ch=canvas.height;
var step1={
startX:0,
endX:100,
currentX:0,
onDraw:function(){
ctx.fillStyle='blue';
ctx.fillRect(this.currentX,50,75,60);
},
onAnimate:function(){
this.currentX++;
if(this.currentX>=this.endX){
this.currentX=this.endX;
this.isCompleted=true;
}
},
isCompleted:false
};
var step2={
startX:200,
endX:100,
currentX:200,
onDraw:function(){
ctx.fillStyle='gold';
ctx.fillRect(this.currentX,50,75,60);
},
onAnimate:function(){
this.currentX--;
if(this.currentX<=this.endX){
this.currentX=this.endX;
this.isCompleted=true;
}
},
isCompleted:false
}
var steps=[ step1, step2 ];
var nextTime=0;
var delayPerFrame=1000/60*3;
requestAnimationFrame(animate);
function animate(time){
if(time<nextTime){requestAnimationFrame(animate); return;}
nextTime=time+delayPerFrame;
ctx.clearRect(0,0,cw,ch);
var isAnimating=false;
for(var i=0;i<steps.length;i++){
var s=steps[i];
if(!isAnimating && !s.isCompleted){
s.onAnimate();
isAnimating=true;
}
s.onDraw();
}
if(isAnimating){
requestAnimationFrame(animate);
}else{
alert('The animation is complete');
}
}
body{ background-color: ivory; }
#canvas{border:1px solid red;}
<h4>Step1: Blue rect moves rightward<br>Step2: Gold rect move leftward.</h4>
<canvas id="canvas" width=300 height=300></canvas>