清除 canvas JavaScript

Clear canvas JavaScript

我正在尝试清除 canvas。我尝试关闭路径,但没有任何改变。另外,我不太确定 ctxBg.close();就在正确的地方。
谢谢。

function drawGrid () {
    drawGrid();
    ctxBg.clearRect(0, 0, canvas.width, canvas.height);

    function drawGrid () {
        for (var i = 75; i <= canvasWidth-25; i+= 25) {
            ctxBg.beginPath();
            ctxBg.moveTo(-25 + i,55);
            ctxBg.lineTo(-25 + i, canvasHeight - 55);
            ctxBg.stroke();
}

    for (var i = 25; i <= canvasHeight -75; i+= 25) {
        ctxBg.beginPath();
        ctxBg.moveTo(55,25 + i);
        ctxBg.lineTo(canvasWidth-55, 25 + i);
        ctxBg.stroke();      
    }ctxBg.close();
}
ctxBg.clearRect(0,0,canvas.width,canvas.height);

这会清除您的 canvas。

您有两个 drawGrid() 函数的定义:

function drawGrid () {
 ...
 function drawGrid () {

你只能拥有一个。接下来,上下文中没有 close() 方法,只有 closePath()。但是,这在这里没有用。 closePath 不是 "end" 路径,而是连接路径中的第一个点和最后一个点,因此路径 shape 是闭合的。

这当然对线条没有用,无论如何,它必须在 stroke() 之前调用。

第三,您正在(试图)渲染网格然后立即清除它。这不会在 canvas 上显示任何内容。您需要将这些操作分开。

这是一个建议的解决方案。两个函数,一个绘制网格,一个清除网格:

var canvas = document.querySelector("canvas"),
    canvasWidth = canvas.width, canvasHeight = canvas.height,
    ctxBg = canvas.getContext("2d");

ctxBg.translate(0.5, 0.5);  // just to make the lines sharper

function drawGrid() {

  ctxBg.beginPath();   // this can be placed here

  for (var i = 75; i <= canvasWidth - 25; i += 25) {
    ctxBg.moveTo(-25 + i, 55);
    ctxBg.lineTo(-25 + i, canvasHeight - 55);
  }

  for (var i = 25; i <= canvasHeight - 75; i += 25) {
    ctxBg.moveTo(55, 25 + i);
    ctxBg.lineTo(canvasWidth - 55, 25 + i);
  }
  
  ctxBg.stroke();      // stroke all at once
  
  // remove button code (ref. comments)
  var button = document.querySelector("button");
  button.parentNode.removeChild(button);
}

function clearGrid() {
  ctxBg.clearRect(0, 0, canvas.width, canvas.height);
}
<button onclick="drawGrid()">Grid</button>
<button onclick="clearGrid()">Clear</button><br>
<canvas></canvas>

更新: 如果需要删除的按钮是上例中的 HTML 按钮,则使用样式删除它:

// assumes the button element is stored in variable button:
button.style.display = "none";

或完全使用其 parentNoderemoveChild():

button.parentNode.removeChild(button);