2012-10-04 167 views
4

我正在使用每种可能的方法清除画布,但没有运气。只要我点击画布,所有以前的图纸就会重新出现。HTML5帆布不清除

这是代码。

function clearCanvas() { 

    //clickX = []; 
    //clickY = []; 
    //clickDrag = []; 
    //context.clearRect(0, 0, canvas.width, canvas.height); 

    //curColor = colorBlack; 
    //redraw(); 

    //clickX = new Array(); 
    //clickY = new Array(); 
    //clickDrag = new Array(); 

    context.fillStyle = '#faebd7'; 
    context.fillRect(0, 0, canvas.width, canvas.height); 
    canvas.width = canvas.width; 
    //context.beginPath(); 

}; 
+1

尝试'context.clearRect(0,0,canvas.width,canvas.height)'?这究竟是怎么被调用的? –

+0

我试过了,这就是为什么我在代码中包含所有可能的组合。请参阅注释掉的代码。从一个按钮调用代码来清除画布。 –

+0

我不认为这可能只是因为你发布的代码。这些方法的工作http://codepen.io/thebabydino/pen/tgxLq – Ana

回答

2

在我看来,你正在使用数组来存储绘图信息。 我看到你已经尝试清除它们,但据我所知,清除的最佳方法是将长度设置为零。试试这个:

function clearCanvas() { 
clickX.length = 0; 
clickY.length = 0; 
clickDrag.length = 0; 
context.clearRect(0, 0, canvas.width, canvas.height); 
}; 
+0

它会清除画布,但是当我选择不同的颜色进行绘制时,它会在我绘制一段时间之后才会选取新的颜色。非常奇怪的行为。 –

+0

这里是我的颜色选择代码:function setColorWhite(){ curColor = colorWhite; redraw(); }; –

+0

你如何存储颜色信息?还是改变颜色会改变屏幕上所有线条的颜色? '因为信息有限,所有我能想象到的是,如果你的数组中有你的颜色,并且该数组并没有在clearcanvas函数中被清除,那么它将绘制(比方说,100点作为以前的颜色),以及它运行时出了点它会切换到你的新颜色。 – Vivix

1

如果它不清除(你有没有错误),那么无论是

  1. 未进入你的clearCanvas()方法,或
  2. 你重新绘制在画布上后,您的拨打clearCanvas()

对不起,这是我与可用的信息得到了最好的:P

1

你说“当我点击在画布上”。这是否意味着最初的画布清除,直到你点击它?然后,这对我说,你有一个事件处理程序,重绘一切onclick。

此外,请确认您的上下文仍指向正确的画布。 某些画布需要创建临时画布。如果你已经这样做了,那么也许你正在清除错误的上下文。否则,我不明白为什么context.clearRect不会像你一样工作。