炫意html5
最早CSS3和HTML5移动技术网站之一

html5教程:html5 实现动画(三)

HTML5教程之html5实现动画:用html5+javascript+canvas实现动画

<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

炫意HTML5 » html5教程:html5 实现动画(三)

CSS3教程HTML5教程