Javascript HTML5画布是否有一个;“放下笔”;方法?

Javascript HTML5画布是否有一个;“放下笔”;方法?,javascript,canvas,html5-canvas,Javascript,Canvas,Html5 Canvas,Python模块Turtle有一个名为pendown()的方法。当被调用时,它会在海龟移动的任何地方画一条线。(Python文档使用“向下拉笔–移动时绘制”的定义。) 然而,HTML5元素似乎没有实现类似的方法;我可能在研究中遗漏了什么吗?您可以使用布尔penDown属性创建一个名为turtle的js对象,并使用它在画布上绘制 此答案的来源(包括代码示例): 虽然JavaScript中还没有像烤好的老乌龟那样的东西,但您可以做同样的事情 使用canvas,您可以使用CanvasRendering

Python模块Turtle有一个名为
pendown()
的方法。当被调用时,它会在海龟移动的任何地方画一条线。(Python文档使用“向下拉笔–移动时绘制”的定义。)


然而,HTML5
元素似乎没有实现类似的方法;我可能在研究中遗漏了什么吗?

您可以使用布尔penDown属性创建一个名为turtle的js对象,并使用它在画布上绘制

此答案的来源(包括代码示例):

虽然JavaScript中还没有像烤好的老乌龟那样的东西,但您可以做同样的事情

使用canvas,您可以使用
CanvasRenderingContext.moveTo(x,y)
函数移动“笔”。如果此命令后面跟着对lineTo(x,y)的调用
,然后是
stroke()
,则它将在两点之间绘制一条直线。正如您可能猜到的,如果您不调用stroke(),就不会有行!因此,如果您编写两个助手函数
penDown()
penUp()
,您可以在moveTo/lineTo之间切换,并最终复制海龟的行为

下面是一个示例(只需单击“运行代码片段”):

let canvas=document.getElementById(“canvas”);
让context=canvas.getContext(“2d”);
让penState=“向上”;
让位置={
x:0,,
y:0
};
context.lineWidth=1;
函数go(x,y){
如果(penState==“向上”){
上下文。移动到(x,y);
}否则{
context.beginPath();
context.moveTo(prevPosition.x,prevPosition.y);
lineTo(x,y);
stroke();
closePath();
}
位置x=x;
位置y=y;
}
函数penDown(){
penState=“向下”;
}
函数penUp(){
penState=“up”;
}
go(50,50);
彭敦();
go(100,50);
penUp();
go(75,25);
彭敦();
go(50,50)

尽管Javascript中没有类似于turtle库的东西,但有一种简单的方法可以复制
pendown()
效果

var canvas=document.querySelector(“canvas”)//使用CSS语法获取元素
var ctx=canvas.getContext(“2d”);//从画布获取上下文
ctx.moveTo(0,0)//如果想在上笔时移动,请使用ctx.moveTo(x,y)

ctx.lineTo(50,50)//如果想在笔向下移动时使用ctx.lineTo(x,y)
画布路径在我想到的用例中是可以接受的。简短回答。不,你必须自己做。这在前面的线条上画了好几次,导致了更深的线条。很好的捕捉@kaido-谢谢!我已经更正了代码!closePath是无用的,它只是一个lineTo,它不告诉路径结束,而是封闭的。我确实知道
.lineTo()
(只需从我的Voronoi单元格数组中检索下一个坐标对),但我觉得它有点不雅。不幸的是,似乎有一种内置的方法可以复制
.penDown
功能。