Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.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从画布上删除元素?_Javascript_Html5 Canvas - Fatal编程技术网

是否可以在不清除整个画布的情况下使用javascript从画布上删除元素?

是否可以在不清除整个画布的情况下使用javascript从画布上删除元素?,javascript,html5-canvas,Javascript,Html5 Canvas,我想做的是在画布上画一个圆,然后在调用函数时删除前一个圆并画一个新的圆。这是否可能,而不必重新绘制整个画布 以下面的代码为例 var c = document.getElementById("myCanvas"); var ctx = c.getContext("2d"); ctx.beginPath(); ctx.arc(95, 50, 40, 0, 2 * Math.PI); ctx.stroke(); 画布是像素的集合(与图像完全相同,但它是从代码计算的,而不是从文件加载的) 移除旧圆并

我想做的是在画布上画一个圆,然后在调用函数时删除前一个圆并画一个新的圆。这是否可能,而不必重新绘制整个画布

以下面的代码为例

var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
ctx.beginPath();
ctx.arc(95, 50, 40, 0, 2 * Math.PI);
ctx.stroke();

画布是像素的集合(与图像完全相同,但它是从代码计算的,而不是从文件加载的)

移除旧圆并绘制新圆的唯一方法(如果您想要像素完美的结果)是将圆重新绘制在新位置

一个可能的解决方案是使用三个不同的
canvas
元素,一个一个地分层:

  • 在变化的部分后面是什么
  • 变化的部分
  • 覆盖变化部分的内容

  • 1和3可以保持固定,您只需要重新绘制第二个画布。

    画布是像素的集合(与图像完全相同,但它是从代码计算的,而不是从文件加载的)

    移除旧圆并绘制新圆的唯一方法(如果您想要像素完美的结果)是将圆重新绘制在新位置

    一个可能的解决方案是使用三个不同的
    canvas
    元素,一个一个地分层:

  • 在变化的部分后面是什么
  • 变化的部分
  • 覆盖变化部分的内容

  • 1和3可以保持固定,您只需要重画第二块画布。

    您必须清除上下文,然后重画除圆圈以外的所有内容。您必须清除上下文,然后重画除圆圈以外的所有内容。这将非常有效。但是,是否可以使顶部画布的背景透明?@ZaneSmit:默认情况下,画布是所有画布透明的。每个像素有4个字节:r、g、b和alpha。如果在画布上绘制对象,则从未绘制到的部分是透明的(alpha=0),这将非常有效。但是,是否可以使顶部画布的背景透明?@ZaneSmit:画布默认为全透明。每个像素有4个字节:r、g、b和alpha。如果在画布上绘制对象,则从未绘制到的零件将被视为槽(alpha=0)