Si utilizza context.clearRect(), ma prima si deve calcolare il rettangolo da cancellare. Ciò si basa su una serie di fattori, come la dimensione del testo e la proprietà textAlign del contesto canvas quando il testo è stato originariamente disegnato. Il codice sotto sarebbe per il metodo draw di un oggetto che disegna il testo in un contesto canvas, in quanto tale ha proprietà per x, y, dimensione del testo, allineamento orizzontale ecc. Nota che memorizziamo sempre l'ultimo pezzo di testo disegnato in modo da può cancellare un rettangolo di dimensioni appropriate quando il valore viene successivamente modificato.
this.draw = function() {
var metrics = this.ctx.measureText(this.lastValue),
rect = {
x: 0,
y: this.y - this.textSize/2,
width: metrics.width,
height: this.textSize,
};
switch(this.hAlign) {
case 'center':
rect.x = this.x - metrics.width/2;
break;
case 'left':
rect.x = this.x;
break;
case 'right':
rect.x = this.x - metrics.width;
break;
}
this.ctx.clearRect(rect.x, rect.y, rect.width, rect.height);
this.ctx.font = this.weight + ' ' + this.textSize + ' ' + this.font;
this.ctx.textAlign = this.hAlign;
this.ctx.fillText(this.value, this.x, this.y);
this.lastValue = this.value;
}
fonte
2013-02-16 03:16:58
Grazie a tutti credo che questo sia l'approccio corretto per eliminare parte della necessità di una cancellazione e di un disegno continuo. Maggiori informazioni qui: https://stackoverflow.com/questions/3008635/html5-canvas-element-multiple-layers – Andrew