路径
路径是线段的序列。2D canvas
接口使用一种奇特的方式来描述这样的路径。路径的绘制都是间接完成的。我们无法将路径保存为可以后续修改并传递的值。如果你想修改路径,必须要调用多个方法来描述他的形状。
<canvas></canvas>
<script>
let cx = document.querySelector("canvas").getContext("2d");
cx.beginPath();
for (let y = 10; y < 100; y += 10) {
cx.moveTo(10, y);
cx.lineTo(90, y);
}
cx.stroke();
</script>
本例创建了一个包含很多水平线段的路径,然后用stroke
方法勾勒轮廓。每个线段都是由lineTo
以当前位置为路径起点绘制的。除非调用了moveTo
,否则这个位置通常是上一个线段的终点位置。如果调用了moveTo
,下一条线段会从moveTo
指定的位置开始。
当使用fill
方法填充一个路径时,我们需要分别填充这些图形。一个路径可以包含多个图形,每个moveTo
都会创建一个新的图形。但是在填充之前我们需要封闭路径(路径的起始节点与终止节点必须是同一个点)。如果一个路径尚未封闭,会出现一条从终点到起点的线段,然后才会填充整个封闭图形。
<canvas></canvas>
<script>
let cx = document.querySelector("canvas").getContext("2d");
cx.beginPath();
cx.moveTo(50, 10);
cx.lineTo(10, 70);
cx.lineTo(90, 70);
cx.fill();
</script>
本例画出了一个被填充的三角形。注意只显示地画出了三角形的两条边。第三条从右下角回到上顶点的边是没有显示地画出,因而在勾勒路径的时候也不会存在。
你也可以使用closePath
方法显示地通过增加一条回到路径起始节点的线段来封闭一个路径。这条线段在勾勒路径的时候将被显示地画出。