Я представляю вам этот обходной путь. Обычно вы выводите текст по одному символу за раз и используете встроенную функцию measureText()
, чтобы определить ширину каждой буквы, если она была нарисована. Затем мы смещаем позицию, в которой мы хотели нарисовать, на ту же сумму. Вы можете изменить этот фрагмент, чтобы получить желаемый эффект.
Предположим, у нас есть HTML, например, так:
<canvas id="canvas" width="300" height="300"/>
И Javascript вот так:
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);
Мы получили бы вывод: ![Sample output](https://i.stack.imgur.com/5ZAAY.png)
Проверьте это в действии в jFiddle . Я использовал последний Chrome.