Vous utilisez context.clearRect(), mais vous devez d'abord déterminer le rectangle à effacer. Ceci est basé sur un certain nombre de facteurs, tels que la taille du texte et la propriété textAlign du contexte de canevas lorsque le texte a été dessiné à l'origine. Le code ci-dessous serait pour la méthode de dessin d'un objet qui dessine du texte dans un contexte de canevas, comme il a des propriétés pour x, y, taille de texte, alignement horizontal etc. Notez que nous stockons toujours le dernier texte dessiné peut effacer un rectangle de taille appropriée lorsque la valeur est modifiée.
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;
}
Merci Je crois que c'est l'approche correcte pour supprimer une partie de la nécessité d'effacement et de ré-étirage continus. Plus d'infos ici: https://stackoverflow.com/questions/3008635/html5-canvas-element-multiple-layers – Andrew