const LCARS_CHAR_SIZE_ARRAY = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 26, 46, 63, 42, 105, 45, 20, 25, 25, 47, 39, 21, 34, 26, 36, 36, 28, 36, 36, 36, 36, 36, 36, 36, 36, 27, 27, 36, 35, 36, 35, 65, 42, 43, 42, 44, 35, 34, 43, 46, 25, 39, 40, 31, 59, 47, 43, 41, 43, 44, 39, 28, 44, 43, 65, 37, 39, 34, 37, 42, 37, 50, 37, 32, 43, 43, 39, 43, 40, 30, 42, 45, 23, 25, 39, 23, 67, 45, 41, 43, 42, 30, 40, 28, 45, 33, 52, 33, 36, 31, 39, 26, 39, 55];
static getTextWidth3(text, fontSize) {
let width = 0;
let scaleFactor = fontSize/100;
for(let i=0; i<text.length; i++) {
width = width + LCARS_CHAR_SIZE_ARRAY[text.charCodeAt(i)];
}
return width * scaleFactor;
}
谢谢你为我工作。我还发现了另一个可以帮助宽度的功能。 textElement.getComputedTextLength()。今晚我会试一试,看看哪个更适合我。 – spudly
我上周在玩这些游戏, getComputedTextLength()方法返回的结果与getBBox()。width的结果相同,因此我只是使用边界框,因为我需要宽度和高度。我不确定是否有任何情况下文本长度会不同于宽度:我想也许提供这种方法来帮助进行文本布局,例如将文本分成多行,而边界框是可用的通用方法在所有(?)元素上。 – NickFitz
到'getBBox()'的链接已经移动到http://wiki.svg.org/index.php/GetBBox – RobM