我目前正在使用以下代码计算文字宽度:
function measureWordSize(word, font) {
var canvas = measureWordSize.canvas || (measureWordSize.canvas = document.createElement("canvas"));
var context = canvas.getContext("2d");
context.font = font;
var metrics = context.measureText(word);
return metrics.width;
}
哪个工作正常,但font
属性必须是格式如下的字符串:[italic] [bold] <font-size> <font-family>
。
我想用某个text-weight
来计算文字的宽度,而将字体设置为700px <font-size> <font-family>
则不起作用。 MDN对数字text-weight
没有任何说明。
如何计算带有数字text-weight
的元素的文字宽度?
答案 0 :(得分:2)
context.font
接受与CSS font
速记属性相同的格式。
取自MDN
/ * size |家庭* /
字体:2em&#34;打开Sans&#34;,sans-serif;/ * style |尺寸|家庭* /
字体:italic 2em&#34; Open Sans&#34;,sans-serif;/ * style |变种|重量|尺寸/线高|家庭* /
字体:italic small-caps bolder 16px / 3 cursive;/ * style |变种|重量|拉伸|尺寸/线高|家庭* /
font:italic small-caps bolder浓缩16px / 3草书;
因此,您也可以将font-weight设置为数字刻度,就像使用CSS一样:
const ctx = canvas.getContext('2d');
const str = "I'm bold";
// set the font as numeric-font-weight | font-size | font-name
ctx.font = '700 16px sans-serif';
console.log('bold:', ctx.measureText(str).width);
ctx.fillText(str, 0, 20)
// reset to normal font-weight
ctx.font = '400 16px sans-serif';
console.log('medium:', ctx.measureText(str).width);
&#13;
<canvas id="canvas"></canvas>
&#13;