canvas图形绘制——斗志的html5学习笔记(4)

首先再次和大家分享一下基础的canvas模板,下面的例子我们将只会为大家展示draw函数内“var cxt=myCanvas.getContext("2d");”以下的代码:

<!DOCTYPE html>
<html>
<head>
<title>myCanvas</title>
<script type="text/javascript">
    function draw()
    {
    var myCanvas=document.getElementById("myCanvas");
    var cxt=myCanvas.getContext("2d");

    }
    </script>
<style type="text/css">
* { margin:0; padding:0;}
</style>
</head>
<body onLoad="draw()">
<canvas id="myCanvas" width="200" height="200"> Your browser does not support the canvas element. </canvas>
</body>
</html>


首先复习一下如何绘制矩形:

cxt.fillStyle="#000";
cxt.fillRect(50, 50, 100, 100);


接下来是关于canvas里面唯一的固定形状矩形的一些方法:

fillRect(x, y, width, height); //矩形填充  x:矩形左上角原点x轴坐标 y:矩形左上角原点y轴坐标 width:矩形宽 height:矩形高
strokeRect(x, y, width, height); //矩形描边
clearRect(x, y, width, height); //矩形清除 使用矩形清除后所在区域将去除一起图形呈现出透明状态


在此需要提及一个小技巧,绘制一个矩形描边:

cxt.strokeRect(50, 50, 100, 100);


你会发现这个矩形描边有些模糊那是因为canvas坐标为整数时线的状态是在两个像素之间:


而坐标为0.5时才是正好位于一个像素上:


所以只要这样,就可以得到锐利的矩形了:

cxt.strokeRect(50.5, 50.5, 100, 100);


接下来是路径绘制的一些方法,这和一些矢量图形处理软件中对路径的理解基本一致例如Adobe Illustrator:

beginPath(); //绘制新路径,重置所有子路径
closePath(); //尝试用直线连接当前点与起始点
stroke(); //描边路径
fill();    //填充路径
moveTo(x, y);    //移动路径当前点
lineTo(x, y);    //用直线绘制路径


例:

cxt.beginPath();
    cxt.moveTo(10.5, 10.5);
    cxt.lineTo(100.5, 100.5);
    cxt.lineTo(100.5, 10.5);
    cxt.closePath();
    cxt.stroke();



arc(x, y, radius,
beginAngle, endAngle, anticlockwise); x,y:圆心坐标; radius:半径; beginAngle,
endAngle:开始的弧度和结束的弧度; anticlockwise:参数为true时为逆时针,参数为false时为顺时针;


这里beginAngle和endAngle都是使用的弧度制,角度和弧度的转换公式为var radians = (Math.PI/180)*degrees;
例:

cxt.beginPath();
    cxt.arc(100, 100, 50, 0, Math.PI*2, true);
    cxt.stroke();


当然还有需要复杂计算的二次方曲线和贝塞尔曲线,在此就不做过多介绍:

quadraticCurveTo(cp1x, cp1y, x, y); //二次方曲线
bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); //贝塞尔曲线

December 8, 4:04 PM