我使用measureText()一次显示一个字符的文本,并且它给我错误的值。
我有一个绘制字符,上下文" ctx"和变量"光标"的函数drawChar(ch)。将char定位在画布上:
var cursor = 0;
function drawChar(ch)
{
ctx.fillStyle = "White";
ctx.font = "20px System";
var twidth = ctx.measureText(ch).width;
ctx.fillText(ch, cursor*twidth, 20);
}
我有一个全局变量"字母"我在开头分割得到一个字母串数组:
var letters = "ABCDEFGHIJKL";
letters = letters.split("");
我这样称呼函数:
drawChar(letters[cursor++]);
它显示在前2-3个字符中正确对齐的字符,但是然后measureText()返回巨大的值,并且字符分散在画布上。
感谢。
答案 0 :(得分:2)
那是因为每个字母都有不同的宽度值。它们不能直接相邻放置。那不会以这种方式工作。
var canvas = document.createElement('canvas');
document.body.append(canvas);
var ctx = canvas.getContext('2d');
canvas.width = 450;
canvas.height = 100;
var cursor = 0;
var twidth = 15;
function drawChar(ch) {
ctx.font = "20px System";
ctx.fillText(ch, cursor * twidth, 20);
}
var letters = "ABCDEFGHIJKL";
letters = letters.split("");
for(cursor = 0; cursor < letters.length; cursor++) {
drawChar(letters[cursor]);
}
&#13;
var canvas = document.createElement('canvas');
document.body.append(canvas);
var ctx = canvas.getContext('2d');
canvas.width = 450;
canvas.height = 100;
var cursor = 0;
var letters = "ABCDEFGHIJKL";
letters = letters.split("");
function drawChar(ch) {
ctx.font = "20px System";
var twidth = 0;
for(var i = 0; i < cursor; i++) {
twidth += ctx.measureText(letters[i]).width;
}
ctx.fillText(ch, twidth, 20);
}
for(cursor = 0; cursor < letters.length; cursor++) {
drawChar(letters[cursor]);
}
&#13;
{{1}}&#13;