在 Javascript 中获取字符宽度
Getting character width in Javascript
我想获取字符的宽度,以计算字符串中任何给定字符(以像素为单位)的位置。我认为这很容易,因为我使用的是等宽字体,但我遇到了问题。
我已经尝试了 this answer 中的建议,但这不适用于大字符串。精度太差,这意味着它可以工作,我可以得到字符串中前几个字符的位置,但是在 10 个字符之后,精度太差以至于我得到的字符位置太远了,实际上是给出之前字符的位置。
我想做的是获取一个字符的宽度,这样我就可以这样写:
var charWidth = ???;
var position = 5; // Shuold get the position of the fifth character in the string
var calculatedPosition = charWidth * position;
试试这个 solution, developed by Ben Ripkens
CSS:
.textDimensionCalculation {
position: absolute;
visibility: hidden;
height: auto;
width: auto;
white-space: nowrap;
}
JS:
var calculateWordDimensions = function(text, classes, escape) {
classes = classes || [];
if (escape === undefined) {
escape = true;
}
classes.push('textDimensionCalculation');
var div = document.createElement('div');
div.setAttribute('class', classes.join(' '));
if (escape) {
$(div).text(text);
} else {
div.innerHTML = text;
}
document.body.appendChild(div);
var dimensions = {
width : jQuery(div).outerWidth(),
height : jQuery(div).outerHeight()
};
div.parentNode.removeChild(div);
return dimensions;
};
在他的博客上,他写道
With the help of this little snippet we can now calculate the text
dimensions like this.:
var dimensions = calculateWordDimensions('42 is the answer!'); <!--obviously a hitchhikers guide fan, lol --->
console.log(dimensions.width);
console.log(dimensions.height);
Phil Freo 也写了一篇 alternate [jquery] solution
$.fn.textWidth = function(text, font) {
if (!$.fn.textWidth.fakeEl) $.fn.textWidth.fakeEl = $('<span>').hide().appendTo(document.body);
$.fn.textWidth.fakeEl.text(text || this.val() || this.text()).css('font', font || this.css('font'));
return $.fn.textWidth.fakeEl.width();
};
我想获取字符的宽度,以计算字符串中任何给定字符(以像素为单位)的位置。我认为这很容易,因为我使用的是等宽字体,但我遇到了问题。
我已经尝试了 this answer 中的建议,但这不适用于大字符串。精度太差,这意味着它可以工作,我可以得到字符串中前几个字符的位置,但是在 10 个字符之后,精度太差以至于我得到的字符位置太远了,实际上是给出之前字符的位置。
我想做的是获取一个字符的宽度,这样我就可以这样写:
var charWidth = ???;
var position = 5; // Shuold get the position of the fifth character in the string
var calculatedPosition = charWidth * position;
试试这个 solution, developed by Ben Ripkens
CSS:
.textDimensionCalculation {
position: absolute;
visibility: hidden;
height: auto;
width: auto;
white-space: nowrap;
}
JS:
var calculateWordDimensions = function(text, classes, escape) {
classes = classes || [];
if (escape === undefined) {
escape = true;
}
classes.push('textDimensionCalculation');
var div = document.createElement('div');
div.setAttribute('class', classes.join(' '));
if (escape) {
$(div).text(text);
} else {
div.innerHTML = text;
}
document.body.appendChild(div);
var dimensions = {
width : jQuery(div).outerWidth(),
height : jQuery(div).outerHeight()
};
div.parentNode.removeChild(div);
return dimensions;
};
在他的博客上,他写道
With the help of this little snippet we can now calculate the text dimensions like this.:
var dimensions = calculateWordDimensions('42 is the answer!'); <!--obviously a hitchhikers guide fan, lol --->
console.log(dimensions.width);
console.log(dimensions.height);
Phil Freo 也写了一篇 alternate [jquery] solution
$.fn.textWidth = function(text, font) {
if (!$.fn.textWidth.fakeEl) $.fn.textWidth.fakeEl = $('<span>').hide().appendTo(document.body);
$.fn.textWidth.fakeEl.text(text || this.val() || this.text()).css('font', font || this.css('font'));
return $.fn.textWidth.fakeEl.width();
};