gpt4 book ai didi

javascript - 使用 Javascript 缩小用户类型的字体大小以适应输入

转载 作者:可可西里 更新时间:2023-11-01 02:51:49 24 4
gpt4 key购买 nike

Apple 的 MobileMe 使用 Javascript 在用户键入时更改其主页上电子邮件登录的字体大小,以便文本始终适合可用空间而不会溢出滚动。

虽然我可以看到如何在每次按键时执行一个函数,但我很好奇每次如何计算字体大小以使其始终适合输入字段。有没有办法用可变宽度字体测量一段文本的长度?他们是如何实现这种效果的?

试试看我的意思: http://www.me.com/

最佳答案

我过去曾使用 jQuery 完成过此操作。您可以像这样测量一段文本的大小:

// txt is the text to measure, font is the full CSS font declaration,
// e.g. "bold 12px Verdana"
function measureText(txt, font) {
var id = 'text-width-tester',
$tag = $('#' + id);
if (!$tag.length) {
$tag = $('<span id="' + id + '" style="display:none;font:' + font + ';">' + txt + '</span>');
$('body').append($tag);
} else {
$tag.css({font:font}).html(txt);
}
return {
width: $tag.width(),
height: $tag.height()
}
}

var size = measureText("spam", "bold 12px Verdana");
console.log(size.width + ' x ' + size.height); // 35 x 12.6

为了使其适合给定的空间,它有点棘手 - 您需要分离出 font-size 声明并适本地缩放它。根据您的操作方式,如果您拆分 font 声明的不同部分,这可能是最简单的。调整大小函数可能如下所示(同样,显然,这是依赖于 jQuery 的):

function shrinkToFill(input, fontSize, fontWeight, fontFamily) {
var $input = $(input),
txt = $input.val(),
maxWidth = $input.width() + 5, // add some padding
font = fontWeight + " " + fontSize + "px " + fontFamily;
// see how big the text is at the default size
var textWidth = measureText(txt, font).width;
if (textWidth > maxWidth) {
// if it's too big, calculate a new font size
// the extra .9 here makes up for some over-measures
fontSize = fontSize * maxWidth / textWidth * .9;
font = fontWeight + " " + fontSize + "px " + fontFamily;
// and set the style on the input
$input.css({font:font});
} else {
// in case the font size has been set small and
// the text was then deleted
$input.css({font:font});
}

您可以在此处查看实际效果:http://jsfiddle.net/nrabinowitz/9BFQ8/5/

测试似乎表明这有点跳跃,至少在 Google Chrome 中是这样,因为只使用了完整的字体大小。您可以使用基于 em 的字体声明做得更好,尽管这可能有点棘手 - 您需要确保文本的 1em 大小宽度测试器与输入相同。

关于javascript - 使用 Javascript 缩小用户类型的字体大小以适应输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6114300/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com