例如:
- G比I更宽
- W比l(L)更宽
这取决于您页面使用的字体类型,等宽字体具有相同的宽度,而比例字体则不同,不同字体类型的宽度也不同。
如果您想要Canvas解决方案:
编辑:尝试使用大写和小写都可以,它能够正常工作。
function getTextWidth(text, font) {
// re-use canvas object for better performance
var canvas = getTextWidth.canvas || (getTextWidth.canvas = document.createElement("canvas"));
var context = canvas.getContext("2d");
context.font = font;
var metrics = context.measureText(text);
return metrics.width;
}
var letters = [ 'A', 'B', 'C' ]; // All character needed, upper and lowercase
var lettersWidth = $.map(letters,
function(letter, i){
return { letter: letter,
width: getTextWidth(letter, "bold 12pt arial")}
});
console.log(lettersWidth);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span id="ruler" style="visibility: hidden; white-space: nowrap;"></span>
将其插入到body
元素中。然后使用一个函数来测量字母。
function measureLetter(letter) {
const ruler = document.getElementById("ruler");
ruler.innerHTML = letter;
return ruler.offsetWidth;
}
这个解决方案是基于将字母放在一个元素内,并使用offsetWidth
获取元素的宽度。为了快速解决问题,我会为每个字符执行一次此操作,并将其长度存储在对象中。然后可以使用该对象比较数组中的元素,而无需使用DOM或画布。
为了使函数返回有用的信息,请使用您选择的font-family
和font-size
样式化您的span
元素。
{'a':6, ..., 'i':1, ...}
),并运行一个将字符串中每个字符的宽度相加的函数之外,没有其他正确的方法来完成这个任务。 - Zenoo