首页 > 代码库 > canvas绘制直线多边形(二)

canvas绘制直线多边形(二)

在绘制之前,依据上一节所说的内容获取context  2维画布

1  context.moveTo(x,y);    定义绘图开始2  context.lintTo(x1,y1);   定义线条画到的位置3  context.lineWidth=5;       //线条宽度4  context.strokeStyle="red"   //线条颜色5  context.stroke();   //用于绘制线条

 

利用上述代码我们可以绘制技术分享一条,从(x,y)坐标开始,到(x1,y1)结束的宽5个像素,颜色为红色的直线    这里的x,y坐标是相对于画布的左上角坐标来看的。

 

 

当然我们可以画线了,当然可以利用线条画出多边形,就像在纸上绘制一样

1     context.moveTo(100,100);2     context.lineTo(700,700);3     context.lineTo(100,700);4     context.lineTo(100,100);5     context.lineWidth=5;       //线条宽度6     context.strokeStyle="red"   //线条颜色7     context.stroke();   //用于绘制线条

 

就是利用lineto函数像不同的点延伸直线而已,以上代码就绘制出了一个三角形

 

 

现在多边形已经画好了,我们希望可以填充颜色,

1   context.fillStyle="#000";    //用于填充色2   context.fill();

我们只要利用fillStyle指定颜色,这里的颜色指定和css颜色指定是一样的

然后fill()绘制一下就ok了

 

 

一张画布当然不会只画一个图形了,我们如何去其他位置在画一个图形呢?

有人会说,直接利用moveto   移动到某个像素点,在用lineto进行绘制就行了呗,就像下面代码一样

 1     context.moveTo(100,100); 2     context.lineTo(700,700); 3     context.lineTo(100,700); 4     context.lineTo(100,100); 5     context.lineWidth=5;       //线条宽度 6     context.strokeStyle="red"   //线条颜色 7     context.stroke();   //用于绘制线条 8     9     context.fillStyle="#000";    //用于填充色10     context.fill();11    12     context.moveTo(200,100);13     context.lineTo(800,700);14     context.strokeStyle="blue";15     context.stroke();

我们可以看到,虽然三角形的边框颜色我们设置的是  红色,线条的颜色是蓝色,可是绘制完之后发现,不论边框还是线条都是蓝色。

 

这就是canvas绘制机制是基于状态的绘图

简单来说对线条,或则填充色的指定都是一种状态,后面相同的种类(颜色,线条宽度。。)的指定会覆盖前面的,这里蓝色的指定覆盖了红色,我们要怎么做呢?

 1     context.beginPath(); 2     context.moveTo(100,100); 3     context.lineTo(700,700); 4     context.lineTo(100,700); 5     context.lineTo(100,100); 6     context.closePath(); 7     context.lineWidth=5;       //线条宽度 8     context.strokeStyle="red"   //线条颜色 9     context.stroke();   //用于绘制线条10    11     context.fillStyle="#000";    //用于填充色12     context.fill();13     context.beginPath();14     context.moveTo(200,100);15     context.lineTo(800,700);16     context.closePath();17     context.strokeStyle="blue";18     context.stroke();

 

我们只要加上beginPath和closepath把绘制线路(线条,多边形,,,)包裹起来,就可以指定包裹部分后面靠的最近的部分状态会对其起作用。

beginPath表示开始,开始绘制的图形将于前面的绘制毫无关系,只会听从后面beginPath之前的状态

closePath表示结束,结束这段绘制,如果是曲线,会用直线封闭这段曲线,这里不写,不印象状态的绘制

 

完整代码

 1 <!DOCTYPE html> 2 <html> 3     <head> 4         <meta charset="utf-8" /> 5         <title></title> 6     </head> 7     <body> 8          9         <canvas id="canvas" width="400" height="400" style="border: 1px solid #aaa;display:block;margin: auto;">你的浏览器不支持</canvas>10         11         <script>12             window.onload=function(){13                 var canvas=document.getElementById("canvas");14             /*    canvas.width=100;15                 canvas.height=100;    //在此处定义canvas的宽高*/16                 var context=canvas.getContext(2d);17                 18                 //基于context绘制19                 context.beginPath();20                 context.moveTo(100,100);21                 context.lineTo(700,700);22                 context.lineTo(100,700);23                 context.lineTo(100,100);24                 context.closePath();25                 context.lineWidth=5;       //线条宽度26                 context.strokeStyle="red"   //线条颜色27                 context.stroke();   //用于绘制线条28                 29                 context.fillStyle="#000";    //用于填充色30                 context.fill(); 31                 context.beginPath();32                 context.moveTo(200,100);33                 context.lineTo(800,700);34                 context.closePath();35                 context.strokeStyle="blue";36                 context.stroke();37                 context.fillStyle="red";    //用于填充色38                 context.fill();     39                 40             }41                 42         </script>43     </body>44 </html>

 

 

下一节,我们将会说,弧和圆的绘制。

 

 

 

 

 

技术分享

技术分享

技术分享

技术分享

canvas绘制直线多边形(二)