What is a path?
It's a series of path commands (moveTo, lineTo, arcTo, etc.) that define the boundary of a vector shape. You can then fill and/or stroke the path as desired.
What is the Use of closePath()
?
// Draw a red path using closePath() in the middle
ctx.beginPath();
ctx.strokeStyle = 'red';
ctx.moveTo(50,100);
ctx.lineTo(100,150);
ctx.lineTo(150,100);
ctx.closePath();
ctx.lineTo(50,50);
ctx.stroke();
// Slide the next path over by 150 pixels
ctx.translate(150,0);
// Draw a blue path using the exact same commands, but without closePath
ctx.beginPath();
ctx.strokeStyle = 'blue';
ctx.moveTo(50,100);
ctx.lineTo(100,150);
ctx.lineTo(150,100);
//ctx.closePath();
ctx.lineTo(50,50);
ctx.stroke();
Using closePath()
causes the point of the pen to move back to the start of the current subpath, drawing a line from the current point back to that starting point; the next command starts from this new point. It's useful if you want to draw a fully outlined shape without explicitly drawing the last line.
It is equivalent to calling lineTo()
with the location of the first point of your current subpath, followed by moveTo()
to that same point (to establish a new subpath).
Seen above, we draw a V
symbol using the first moveTo
and following two lineTo
commands. When we call closePath
on the red path it draws the horizontal bar across and causes the next line to start from the top left corner.
When we don't call closePath
in the blue path the next lineTo
command continues on from the last drawn point.
Note that closePath()
is not necessary most of the time, unlike beginPath()
which you must call each time you want to start drawing a new path. (If you don't, all the old path drawing commands are part of the next drawing.)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…