使用html5 canvas 画一台小单车动画

       最近一直在搞前端,不过没用过canvas,呵呵!就想试一下,也刚刚好我图形学的作业就是做一台小单车动画(不限语言),所以我就在一个蛋疼的下午写了一台很蛋疼的单车了,呵呵!样子很丑,不过可以美化,大家可以参考参考!高手勿进虐我这小菜菜,菜鸟共同分享也可以参考当课堂作业,呵呵!

       废话不说,先看代码:

      HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
    <title></title>
    <link rel="stylesheet" href="../css/text.css" />
    <script type="text/javascript" src="../js/canvas.js"></script>
</head>
<body>
    <canvas class="mycanvas" id="mycanvas">
    </canvas>
    <button οnclick="start()">神啊!赐予我小单车神奇的力量吧!</button>
</body>
</html>


       CSS:
#mycanvas{
    width: 1300px;
    height: 700px;
    background-color: #d1fffe;
    border: 1px solid #000;
}



       JS:
var model;
var bike;
var incremental=0;
var timer;

if(!model)
model={};
model.create = function(){};
model.create.prototype = {
    cxt : null,
    canvas : null,
    init: function (){
        canvas = document.getElementById("mycanvas");
        canvas.width = 1300;
        canvas.height = 700;
        cxt = canvas.getContext("2d");
    },
    drawLine : function (x1,y1,x2,y2){
        cxt.beginPath();
        cxt.moveTo(x1,y1);
        cxt.lineTo(x2,y2);
        cxt.closePath();
        cxt.stroke();
    },
    drawCircle : function (centerX, centerY, radius){
        cxt.beginPath();
        cxt.strokeStyle = "rgb(0,0,0)";
        cxt.arc(centerX,centerY,radius,0,Math.PI*2,false);
        cxt.closePath();
        cxt.stroke();
    },
    drawRect : function (x,y,width,height){
        cxt.beginPath();
        cxt.strokeStyle = "rgb(0,0,0)";
        cxt.strokeRect(x,y,width,height);
        cxt.closePath();
        cxt.stroke();
    },
    clearCanvas : function (){
        cxt.fill();
        cxt.clearRect(0,0,1300,700);
    }
};

window.onload = function (){
    bike = new model.create();
    bike.init();
    //先初始化一辆单车
    draw();
}

function start(){
    timer = setInterval("draw()",100);
}

function draw(){
    //先清除canvas
    bike.clearCanvas();
    //第1部分
    bike.drawLine(980+incremental,280,930+incremental,380);
    //第2部分
    bike.drawLine(955+incremental,330,990+incremental,370);
    //第3部分
    bike.drawLine(990+incremental,370,990+incremental,420);
    //第4部分
    bike.drawLine(990+incremental,420,950+incremental,500);
    //第5部分
    bike.drawCircle(950+incremental,500,50);
    //第6部分
    bike.drawLine(990+incremental,395,1200+incremental,395);
    //第7部分
    bike.drawLine(1080+incremental,370,1080+incremental,395);
    //第8部分
    bike.drawRect(1040+incremental,355,80,15);
    //第9部分
    bike.drawLine(1150+incremental,395,1200+incremental,500);
    //第10部分
    bike.drawCircle(1200+incremental,500,50);
    //第11部分
    bike.drawRect(1200+incremental,387,60,15);

    //k约等于25根号2,稍微用圆的方程算算就OK
    var k = 35.3;

    //第12,13,14,15部分
    if(incremental%2==0){
        //第12部分
        bike.drawLine(950+incremental,450,950+incremental,550);
        //第13部分
        bike.drawLine(900+incremental,500,1000+incremental,500);
        //第14部分
        bike.drawLine(1200+incremental,450,1200+incremental,550);
        //第15部分
        bike.drawLine(1150+incremental,500,1250+incremental,500);
    }
    else{
        //第12部分
        bike.drawLine(950+incremental-k,500-k,950+incremental+k,500+k);
        //第13部分
        bike.drawLine(950+incremental+k,500-k,950+incremental-k,500+k);
        //第14部分
        bike.drawLine(1200+incremental-k,500-k,1200+incremental+k,500+k);
        //第15部分
        bike.drawLine(1200+incremental+k,500-k,1200+incremental-k,500+k);
    }

    incremental = incremental-5;
    if(incremental<-650)
        clearInterval(timer);
}



       步骤:

       1.先封装好一个model的类,里面有各种画图的方法

       2:然后onload的时候调用draw()初始化一台单车

       3:当按下按钮的时候出发start()触发动画效果

       4:其实动画效果就是在x轴上平移,然后4条车轮轴在交替出现,形成在运动的过程而已

       呵呵,是不是很简单,当你空虚寂寞难耐又无聊的时候,不妨也可以写点东西打发下时间,呵呵!看看效果图吧!



点击下图就会运动起来(只是说明,没有效果,想看效果,自己黏贴代码运行下,呵呵!)

          呵呵,我这菜鸟哪里写得不好的地方请各位大神指出错误,呵呵!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值