Canvas入门(一)
七、路径
Canvas中的路径代表你希望呈现的任何形状。上边的对角线就是一条路径,beginPath就说明是要开始绘制路径了。实际上,路径可以要多复杂有多复杂:多条线、曲线段,甚至是子路径。如果想要在canvas中绘制任意形状那么我们需要来关注一下路径的API。
一般的,开始绘制图形之前,第一个就要调用beginPath。这和函数不带任何参数,它用来通知canvas将要开始绘制一个新的图形了。对于canvas来说,beginPath函数的最大用处是canvas需要根据此来计算图形的内部和外部的范围,以便完成后续的描边和填充。
路径会跟踪当前坐标,默认值是原点。Canvas本身也跟踪当前坐标,不过可以通过绘制代码来修改。
调用beginPath后,就可以用context的各种方法来绘制想要的形状了。到目前为止,我们已经用到了几个简单的context路径函数。
- moveTo(x,y):不绘制,只是将当前位置移动到新的目标坐标(x,y)。
- lineTo(x,y):不仅将当前位置移动到新的目标坐标(x,y),而且在两个坐标之间画一条直线。
下一个特殊的路径函数叫做closePath。这个函数的行为同lineTo很像,唯一的差别在于closePath会将路径的起始坐标自动作为目标坐标。closePath还会通知canvas当前绘制的图像已经闭合或者形成了完全封闭的区域,自对将来的填充和描边都非常有用。
此时可以在已有的路径中继续创建其他子路径,或者随时调用beginPath重新绘制新路径并完全清除之前所有的路径。
下边我们尝试着绘制一个松树的路径(注意这里画布调到了300 X 300):
window.onload = function(){ var canvas = document.getElementById("square"); var context = canvas.getContext("2d"); context.save(); context.translate(130,250); //开始绘制 //绘制树冠 context.beginPath(); context.moveTo(-25,-50); context.lineTo(-10,-80); context.lineTo(-20,-80); context.lineTo(-5,-110); context.lineTo(-15,-110); //树的顶点 context.lineTo(0,-140); context.lineTo(15,-110); context.lineTo(5,-110); context.lineTo(20,-80); context.lineTo(10,-80); context.lineTo(25,-50); //连接起点,闭合路径 context.closePath(); //绘制当前路径 context.stroke(); context.restore(); }; |
上边的代码实际上使用的依然是前面用过的移动和画线的命令,只不过调用的次数多了一些。这几条线表现出了一棵松树的轮廓,最后我们闭合了路径。
八、边框样式:
我们还可以通过通过代码来设置边框的样式,让绘制的图形更好看。
//连接起点,闭合路径 context.closePath(); //加宽线条 context.lineWidth = 4; //平滑路径的接合点 context.lineJoin = 'round'; //将颜色改为绿色 context.strokeStyle = 'green'; //绘制当前路径 context.stroke(); |
设置这些属性可以改变以后要绘制的图形的外观,这个外观起码可以保持到我们将context恢复到上一个状态。
首先,我们将线条宽度加粗到4像素。
其次,我们将lineJoin属性设置为round,主要用来修改连接方式,是拐角变的更加圆滑。
最后,通过strokeStyle属性改变了线条的颜色。
本教程由尚硅谷教育大数据研究院出品,如需转载请注明来源,欢迎大家关注尚硅谷公众号(atguigu)了解更多。