2012-11-17 11 views
11

Sto usando questo JavaScript sul corpo onMouseMove funzione di:funzione clearRect non cancella la tela

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(); 

} 

Si suppone per cancellare la tela ogni volta che muovo il mouse, e disegnare una nuova linea, ma non funziona correttamente. Sto provando a risolverlo senza usare jQuery, ascoltatori di mouse o simili.

Ecco il codice:

http://jsfiddle.net/7vx2z/

risposta

22

Si dovrebbe usare "BeginPath()". È così.

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

Contrassegna questa risposta come accettata per la correttezza. –

+0

Vorrei aggiungere che questo vale anche per i metodi di disegno come il rect e l'arco. – MetalGodwin

+1

È vecchio ma ... 'closePath' è inutile e fuorviante qui, è solo un' lineTo (previousStartingPointOfThePath) 'quindi per una singola riga, non farà nulla, e non dice affatto che hai finito il tuo dichiarazione di percorso. – Kaiido

-1

Prova con 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

o semplicemente 'myCanvas.width = myCanvas.width;'. –