2012-10-04 96 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不會像你一樣工作。