天天看点

html5之canvas基础1

1、canvas画布常用属性:width、height,使用canvas时首先需要获取画布:

var can = document.getElementById("canvas");
var ctx = can.getContext('2d');      

在画布上每一笔都会有一个开始、结束,否则画出来的效果会连在一起

ctx.beginPath();
。。。
ctx.closePath();      

2、画笔的两种画法:

1)stroke:非填充画法;

2)fill:填充画法;

ctx.beginPath();
ctx.fillStyle="black";
ctx.lineWidth=2;
ctx.arc(250,250,5,0,360*Math.PI/180,true);
ctx.fill();
ctx.closePath();      
ctx.beginPath();
ctx.strokeStyle="black";
ctx.lineWidth=8;
ctx.moveTo(0,-150);
ctx.lineTo(0,10);
ctx.stroke();
ctx.closePath();      

3、常见图形:

1)直线:ctx.moveTo(x,y);ctx.lineTo(x,y);

2)圆: arc(X,Y,Radius,startAngle,endAngle,anticlockwise),意思是(圆心X坐标,圆心Y坐标,半径,开始角度(弧度),结束角度弧度,是否按照顺时针画);

3)矩形:

 fillRect(X,Y,Width,Height);

 strokeRect(X,Y,Width,Height);

4、坐标:

1)translate(x,y):把坐标系原点设置为x,y.以后的坐标都是相对于这个标准的。

2)rotate(90 * Math.PI / 180) 按顺时针旋转90度。

3)save():用来保存Canvas的状态。save之后,可以调用Canvas的平移、放缩、旋转、错切、裁剪等操作。

4)restore():用来恢复Canvas之前保存的状态。防止save后对Canvas执行的操作对后续的绘制有影响。save和restore要配对使用(restore可以比save少,但不能多),如果restore调用次数比save多,会引发Error。

5)clearRect(x,y,width,height);清除区域;

实例:小时钟

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>time</title>
    <style type="text/css">

        canvas{border:dashed 2px #CCC;margin: auto;}
    </style>
    <script type="text/javascript">
        var ctx = null;
        function aa() {
            var now = new Date();
            var s=now.getSeconds(),m=now.getMinutes(),h=now.getHours();
            h = h+ m/60;
            h=h>=12?h-12:h;
            
            ctx.clearRect(0,0,500,500);    ///初始化画布
            //画表盘
            ctx.beginPath();
            ctx.strokeStyle ="blue";
            ctx.lineWidth=10;
            ctx.arc(250,250,200,0,360*Math.PI/180,true);
            ctx.stroke();
            ctx.closePath();
            
            //画刻度
            for (var i=0;i<60;i++) {
                if (i%5 ==0 ) {
                    ctx.save();
                    ctx.translate(250,250);
                    ctx.rotate(i*6*Math.PI/180);
                    ctx.beginPath();
                    ctx.strokeStyle="black";
                    ctx.lineWidth=8;
                    //alert(i*30);
                    ctx.moveTo(0,-190);
                    ctx.lineTo(0,-170);
                    ctx.stroke();
                    ctx.closePath();
                    ctx.restore();
                } else {
                    ctx.save();
                    ctx.translate(250,250);
                    ctx.rotate(i*6*Math.PI/180);
                    ctx.beginPath();
                    ctx.strokeStyle="black";
                    ctx.lineWidth=4;
                    //alert(i*30);
                    ctx.moveTo(0,-190);
                    ctx.lineTo(0,-180);
                    ctx.stroke();
                    ctx.closePath();
                    ctx.restore();
                }
                
            }
            
            //时针
            ctx.save();
            ctx.translate(250,250);
            ctx.rotate(h*30*Math.PI/180);
            ctx.beginPath();
            ctx.strokeStyle="black";
            ctx.lineWidth=8;
            //alert(i*30);
            ctx.moveTo(0,-150);
            ctx.lineTo(0,10);
            ctx.stroke();
            ctx.closePath();
            ctx.restore();
            
            //分针
            ctx.save();
            ctx.translate(250,250);
            ctx.rotate(m*6*Math.PI/180);
            ctx.beginPath();
            ctx.strokeStyle="#abcdef";
            ctx.lineWidth=5;
            //alert(i*30);
            ctx.moveTo(0,-160);
            ctx.lineTo(0,15);
            ctx.stroke();
            ctx.closePath();
            ctx.restore();
            
            //秒针
            ctx.save();
            ctx.translate(250,250);
            ctx.rotate(s*6*Math.PI/180);
            ctx.beginPath();
            ctx.strokeStyle="red";
            ctx.lineWidth=2;
            ctx.moveTo(0,-170);
            ctx.lineTo(0,20);
            ctx.stroke();
            ctx.closePath();
            ctx.restore();
            
            //中心点
            ctx.save();
            ctx.beginPath();
            ctx.fillStyle="black";
            ctx.arc(250,250,5,0,360*Math.PI/180,true);
            ctx.fill();
            ctx.closePath();
            ctx.restore();

        }
        window.onload = function() {
            var can = document.getElementById("canvas");
            ctx = can.getContext('2d');
            
            
            //aa();

        }
        
        setInterval(aa,1000);
    </script>
 </head>
 <body >
    <canvas id="canvas" width=500px; height=500px;></canvas>

</body>
</html>      

继续阅读