2012-11-17 7 views
11

Używam tego JavaScript w organizmie onmousemove funkcji:funkcja clearRect nie czyści płótno

function lineDraw() { 
    //Get the context and the canvas: 
    var canvas=document.getElementById("myCanvas"); 
    var context=canvas.getContext("2d"); 
    //Clear the last canvas 
    context.clearRect(0, 0, canvas.width,canvas.height); 
    //Draw the line: 
    context.moveTo(0,0); 
    context.lineTo(event.clientX,event.clientY); 
    context.stroke(); 

} 

To ma jasne płótno za każdym razem, poruszam myszką dookoła i narysować nową linię, ale nie działa poprawnie. Próbuję go rozwiązać bez użycia jQuery, myszy lub podobnych.

Oto kod:

http://jsfiddle.net/7vx2z/

Odpowiedz

22

należy użyć "beginPath()". To jest to.

function lineDraw() { 
    var canvas=document.getElementById("myCanvas"); 
    var context=canvas.getContext("2d"); 
    context.clearRect(0, 0, context.width,context.height); 
    context.beginPath();//ADD THIS LINE!<<<<<<<<<<<<< 
    context.moveTo(0,0); 
    context.lineTo(event.clientX,event.clientY); 
    context.stroke(); 
} 
+0

Oznaczono tę odpowiedź jako zaakceptowaną dla poprawności. –

+0

Chciałbym dodać, że dotyczy to również metod rysowania, takich jak rect i arc. – MetalGodwin

+1

Jest stary, ale ... 'closePath' jest tutaj bezużyteczny i mylący, to tylko' lineTo (previousStartingPointOfThePath), więc w przypadku pojedynczej linii nic nie da i nie mówi wcale, że skończyłeś deklaracja ścieżki. – Kaiido

-1

Spróbuj z context.canvas.width = context.canvas.width:

function lineDraw() { 
    var canvas=document.getElementById("myCanvas"); 
    var context=canvas.getContext("2d"); 
    //context.clearRect(0, 0, context.width,context.height); 
    context.canvas.width = context.canvas.width; 
    context.moveTo(0,0); 
    context.lineTo(event.clientX,event.clientY); 
    context.stroke(); 
} 

Demo HERE

+0

lub po prostu 'myCanvas.width = myCanvas.width;'. –