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