javascript - 计算数字空间以近似一行文本

标签 javascript reactjs text

我正在制作歌词+和弦显示,我想采用这种原始格式:

[Dm]Hello darkness my old [C]friend

并将和弦放在歌词上方。我可以通过将每个单词设为 div,并将和弦设置为绝对/相对于该单词来实现此目的,但这意味着人们无法将所有内容复制并粘贴到 Word 等所见即所得编辑器中。

所以我想在歌词上方添加一行并用空格填充,如下所示:

Dm                    C
Hello darkness my old friend

使用等宽文本很容易,但我想使用 Arial/Times 等字体。 有没有办法计算出多少个空格相当于某些文本的长度?

注意 - 在每个人都说“哦,你应该使用不同的方法来显示和弦”之前,我已经尝试了几种方法,但我正在专门寻找可以复制和粘贴而不会丢失和弦位置的东西.

最佳答案

CanvasRenderingContext2D接口(interface)有文本度量方法 measureText可用于获取文本的宽度。

它需要两个参数,要测量的文本和 CSS font值。

流程中使用的 Canvas 元素不必是文档的一部分,也不必仅仅为了使用 measureText 而具有宽度或高度属性。

概念示例:

"use strict";

const ctx = document.createElement("CANVAS").getContext("2d");

function getTextWidth(text, cssFont) {
    ctx.font = cssFont;
    var o = ctx.measureText(text);
    return o.width;
}

var cssFont = "14px Arial";
var spaceWidth = getTextWidth( "          ", cssFont) / 10;
var lyric = "Hello darkness my old "
var lyricWidth = getTextWidth("Hello darkness my old ", cssFont);

console.log('"' + lyric + '"' + " width is " + lyricWidth);
console.log("space width is " + spaceWidth);
console.log("So the lyric width is " + lyricWidth/spaceWidth + " spaces");

关于javascript - 计算数字空间以近似一行文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51072836/

相关文章:

javascript - 使用其他页面中的 'href' 到达(即取消隐藏)特定 div

javascript - 如何渲染 jsx 以响应条件为真和数组映射?

javascript - 无法在 material-ui Button 组件中读取 null 的属性(读取 'pulsate')

Javascript 类语法和在方法中绑定(bind) this

Python - 如果包含列表中元组的元素,则仅打印行

javascript - 如何在 javascript 中将文本文件用作数据库? (火狐插件)

Python One-hot 对文本中的每 2 个字符进行编码

javascript - 如何将 Display None 属性添加到 Img 标签

javascript - Javascript 中的随机日期生成

javascript - javascript函数可以应用于某个CSS类的所有元素吗?