javascript - js canvas - 使用特定文本权重计算文本宽度

标签 javascript html css fonts html5-canvas

我目前正在使用以下代码来计算文本宽度:

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 的元素的文本宽度?

最佳答案

context.font 接受与 CSS 相同的格式 font速记属性。

取自MDN

/* size | family */
font: 2em "Open Sans", sans-serif;

/* style | size | family */
font: italic 2em "Open Sans", sans-serif;

/* style | variant | weight | size/line-height | family */
font: italic small-caps bolder 16px/3 cursive;

/* style | variant | weight | stretch | size/line-height | family */
font: italic small-caps bolder condensed 16px/3 cursive;

所以你也可以设置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);
<canvas id="canvas"></canvas>

关于javascript - js canvas - 使用特定文本权重计算文本宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47253435/

相关文章:

javascript - 使用 JavaScript 添加带有变量的 HTML

html - 当高度设置为 100% 时 Div 缩放到内容

javascript - 如何制作没有 "fixed"高度的可滚动框?

javascript - 根据所选下拉列表更改标签 [Ruby on Rails 4.2]

javascript - 使用 Val() 作为参数时返回对象而不是字符串

javascript - 如何使用 jquery 将新的 <td> 附加到第 n 个 <tr> ?

javascript - 根据react中对象的索引渲染不同的html

html - 无法让我的导航栏正确对齐

html - 图像样式效果

javascript - 无法显示带有基于邮政编码的标记的 Google map