Vi presento questa soluzione alternativa. In pratica, il testo viene stampato un carattere alla volta e viene utilizzata la funzione incorporata measureText()
per determinare la larghezza di ogni lettera man mano che veniva disegnata. Quindi abbiamo compensato la posizione in cui volevamo disegnare di quella stessa quantità. Puoi modificare questo frammento per produrre l'effetto desiderato.
Supponiamo di avere HTML in questo modo:
<canvas id="canvas" width="300" height="300"/>
e Javascript in questo modo:
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
function randomColor(){
var r = Math.floor(Math.random()*256);
var g = Math.floor(Math.random()*256);
var b = Math.floor(Math.random()*256);
return "rgb("+ r + "," + g + "," + b +")";
}
function texter(str, x, y){
for(var i = 0; i <= str.length; ++i){
var ch = str.charAt(i);
ctx.fillStyle = randomColor();
ctx.fillText(ch, x, y);
x += ctx.measureText(ch).width;
}
}
texter("What's up?", 10, 30);
Ci piacerebbe ottenere un output:
Check it out in azione at jFiddle. Ho usato l'ultimo Chrome.
Grazie. Speravo che ci fosse un modo per farlo senza scrivere più di una volta, ma la tua soluzione è un'ottima alternativa, soprattutto perché non intaccherà il mio dimensionamento dinamico del testo. Grazie. –
Prego. E benvenuto nello stackoverflow! Nel frattempo dovresti contrassegnare le risposte che colpiscono la tua fantasia come * accettata *. ;) – Gleno
Ah, fatto. Ho implementato quello che volevo usando una versione modificata di questo metodo. Una cosa che ho notato è che in un'animazione se vuoi disegnare ogni lettera ogni fotogramma, sarà estremamente ritardata in firefox (IE/Chrome andava bene comunque). Dal momento che volevo il primo colore diverso, ho scritto il primo carattere, poi il resto. –