html5 實現動畫(三)
編輯:HTML5詳解  
XML/Html Code復制內容到剪貼板
- <canvas id="canvas3" width="250" height="300" style="background-color:black">
- 你的浏覽器不支持 <canvas>標簽,請使用 Chrome 浏覽器 或者 Firefox 浏覽器
- </canvas><br/>
- 幀數:<input id="txt4" type="text" value="10"/><br/>
- 速度:<input type="text" id="txt5" value="5"/><br/>
- 比例:<input type="text" id="txt6" value="2"/><br/>
- <input type="button" value="開始" onclick="animate()"/>
- <input type="button" value="暫停" onclick="stop()"/>
- <script type="text/Javascript">
- //定時器
- var interval=null;
- //停止動畫
- function stop(){
- clearInterval(interval);
- }
- //===================================================================
- //精靈登場
- //====================================================================
- //每一幀在大圖中的位置
- var frames=[];
- frames[0]=[0,4,19,19];
- frames[1]=[22,1,24,19];
- frames[2]=[49,0,18,17];
- frames[3]=[1,32,18,17];
- frames[4]=[22,33,24,19];
- frames[5]=[49,36,19,19];
- //精靈類
- function Sprite(dx,dy,delta,fps){
- this.dx=dx;
- this.dy=dy;
- this.fps=fps;
- this.delay=1000/fps;
- this.last_update=0;
- //移動速度
- this.delta=-delta;
- //幀編號
- this.index=0;
- //方向
- this.dir_left=true;
- }
- Sprite.prototype.update=function(canvas){
- //獲取當前時間
- var now=(new Date()).getTime();
- if((now-this.last_update)>this.delay){
- if(this.dir_left){
- //方向朝左,只繪制0 1 2幀
- if(this.index>2)
- this.index=0;
- }
- else{
- //方向朝右,只繪制 3 4 5 幀
- if(this.index>5)
- this.index=3;
- }
- //取出當前幀的坐標
- this.frame=frames[this.index];
- //當前幀在大圖中的位置
- thisthis.sx=this.frame[0];
- thisthis.sy=this.frame[1];
- thisthis.sw=this.frame[2];
- thisthis.sh=this.frame[3];
- //當前幀大小
- thisthis.dw=this.frame[2];
- thisthis.dh=this.frame[3];
- //改變 x 坐標
- thisthis.dx=this.dx+this.delta;
- //左邊緣檢測
- if(this.dx<0){
- this.dx=0;
- //轉向
- this.delta=-this.delta;
- this.dir_left=false;
- this.index=3;
- }
- //右邊緣檢測
- if((this.dx+this.dw)>canvas.getAttribute("width")){
- this.dx=canvas.getAttribute("width")-this.dw;
- //轉向
- this.delta=-this.delta;
- this.dir_left=true;
- this.index=0;
- }
- thisthis.dy=this.dy;//y 不移動
- this.index++;
- this.last_update=now;
- }
- }
- function animate(){
- //停止動畫
- stop();
- //移動速度
- var delta=parseInt(document.getElementById('txt4').value);
- //每秒繪制多少次
- var fps=parseInt(document.getElementById('txt5').value);
- //比例
- var scale=parseInt(document.getElementById('txt6').value);
- //畫布對象
- var canvas=document.getElementById("canvas3")
- //獲取上下文對象
- var ctx = canvas.getContext("2d");
- //清空畫布
- ctx.clearRect(0,0,canvas.getAttribute("width"),canvas.getAttribute("height"));
- var img=new Image();
- img.src="http://www.crazyfrom.com/images/2010/10/sprite.gif";
- var sprite=new Sprite(120,150,delta,fps);
- interval = setInterval(function(){
- //清空畫布
- ctx.clearRect(0,0,canvas.getAttribute("width"),canvas.getAttribute("height"));
- //更新數據
- sprite.update(canvas);
- //保存狀態
- ctx.save();
- //移動坐標
- ctx.translate(sprite.dx,sprite.dy);
- ctx.scale(scale,scale);
- ctx.drawImage(img,sprite.sx,sprite.sy,sprite.sw,sprite.sh,0,0,sprite.dw,sprite.dh);
- //恢復狀態
- ctx.restore();
- },1);
- }
- </script>
源碼下載:donghua3.rar