Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我必须拥有content.beginPath()和content.closePath()吗?_Javascript_Html_Canvas - Fatal编程技术网

Javascript 我必须拥有content.beginPath()和content.closePath()吗?

Javascript 我必须拥有content.beginPath()和content.closePath()吗?,javascript,html,canvas,Javascript,Html,Canvas,绘制这条线或所有图形时是否必须包括beginPath和closePath。我有一本新的HTML5画布书,但这本书我并不完全确定。我注释掉了这两行,这行仍然显示。这两条线的意义是什么 问题:beginPath()和closePath()是做什么的? 代码: beginPath()清除旧路径,以便定义新路径 closePath()连接第一个点和最后一个点,在您的示例中不需要。在任何情况下,都应该在填充冲程之前使用,以对光栅化结果产生影响。否,beginPath和closePath不是必需的 画布上下

绘制这条线或所有图形时是否必须包括beginPath和closePath。我有一本新的HTML5画布书,但这本书我并不完全确定。我注释掉了这两行,这行仍然显示。这两条线的意义是什么

问题:beginPath()和closePath()是做什么的?

代码:

beginPath()
清除旧路径,以便定义新路径


closePath()
连接第一个点和最后一个点,在您的示例中不需要。在任何情况下,都应该在填充冲程之前使用,以对光栅化结果产生影响。

否,
beginPath
closePath
不是必需的

画布上下文具有当前路径。您可以使用
moveTo
lineTo
等方法向该路径添加指令。构建完路径后,可以使用
stroke
fill
等方法,使用当前路径在画布上绘制

closePath
只是您可以添加的另一条指令。当使用
填充
时,您可能不会注意到其效果,但当使用
笔划
时,它将(基本上)返回起始位置,并“关闭”路径。比较和对比:

另一方面,
beginPath
,放弃以前的路径,并允许您启动新路径。如果没有它,您将越来越多地附加到前面的路径,这可能是不可取的。比较和对比:


这些路径是否保存在画布中,以便您可以从索引类型的情况中调用它们。在上面的示例中,您没有beginPath()endPath(),因此它们只是附加到旧画布上。@user3376708:一次只保存一条路径,而
beginPath
将丢弃它。如果要返回旧路径,必须调用
beginPath
放弃当前路径,然后根据各个指令重新构建旧路径。(我不太明白你所说的“索引类型情况”是什么意思。)有没有办法回忆以前使用过的路径。你可以在画布中放置五个beginPath()和五个closePath(),然后调用第二个路径。将来,你可以使用单独的路径对象。然而,目前还没有完全实现这一点的浏览器。现在,您需要一次一个地重新创建路径。使用路径对象会有好处,所以最好像有理由一样使用它们。
context.lineJoin='round';
context.lineCap='butt';
context.beginPath();
context.moveTo(10, 100);
context.lineTo(35, 100);
context.lineTo(35,125);
context.stroke();
context.closePath();
ctx.moveTo(10, 10);    ctx.moveTo(10, 10);
ctx.lineTo(90, 10);    ctx.lineTo(90, 10);
ctx.lineTo(90, 90);    ctx.lineTo(90, 90);
                       ctx.closePath();   
ctx.stroke();          ctx.stroke();
ctx.moveTo(10, 10);           ctx.moveTo(10, 10);
ctx.lineTo(90, 10);           ctx.lineTo(90, 10);
ctx.lineWidth = 4;            ctx.lineWidth = 4;
ctx.strokeStyle = "red";      ctx.strokeStyle = "red";
ctx.stroke();                 ctx.stroke();
                              ctx.beginPath();
ctx.moveTo(10, 20);           ctx.moveTo(10, 20);
ctx.lineTo(90, 20);           ctx.lineTo(90, 20);
ctx.lineWidth = 2;            ctx.lineWidth = 2;
ctx.strokeStyle = "blue";     ctx.strokeStyle = "blue";
ctx.stroke();                 ctx.stroke();