在Javascript中测量字符串宽度
Measuring the string width in Javascript
我正试图精确地将字符串放入一定的宽度。这意味着字体大小会根据字符串而变化。我现在使用jQuery使用以下函数:
function fontResize ( )
{
for (var i = $("#date").css("font-size").slice(0, -2); $("#date").width() < $("#clock").width(); i++)
$("#date").css("font-size", i.toString() + "px");
}
我的想法是将CSS中的font-size设置为尽可能小的值。我用这个值初始化循环,并将font-size增加1,直到字符串比包含元素的宽度更宽。在本例中,字符串为"date",包含元素为"clock"。
虽然这工作,我认为主要的缺点是字符串必须首先绘制之前的宽度可以确定。这意味着我不能在加载函数体之前调用这个函数。
如果有人知道更好的方法,请告诉我!谢谢。为了确保在页面完全呈现时应用到它的所有样式,是的,您确实希望在进行测量之前将元素放入DOM(并在DOM的正确位置)。但是,您不必等到else的所有内容都存在(除非您认为它会影响您正在测量的字符串的样式)。你可以把你的代码放在script
块立即在question —不等待ready
。根据Google的Closure库工程师的说法,date
元素将在那里并且可以访问。例如,如果date
是span
:
<body>
...
<span id="date">December 13th</span>
<script>fontResize();</script>
...
...
</body>
像这样把代码和标记混在一起是很不幸的(特别是如果你有单独的团队来做标记和代码),但是如果你的要求是尽可能快地调整文本的大小,那就应该这样做。
上面还假设您的fontResize
函数已经加载(例如,在页面上更高的script
块中)。这是像这样混合标记和代码是不幸的另一个原因,因为通常您当然希望将脚本放在底部,就在关闭body
标记之前。
然而:也许值得尝试一下,看看您是否可以在关闭body
标记之前的脚本中进行大小调整。页面可能会有一个小窗口看起来不正确,但是非常小,当然页面在加载时看起来有点滑稽。这样就不会有混合问题,也不必提前加载脚本。您可能会发现,刚刚结束前的- body
-标签已经足够快了。
如何使用画布和measureText方法?
$(function () {
var canvas = $("canvas")[0];
var context = canvas.getContext("2d");
var text = "hello world";
context.font = "40pt Calibri";
var metrics = context.measureText(text);
alert(metrics.width);
});
相关文章:
- 如何在JavaScript中将字符串转换为函数引用
- jQuery中是否内置了任何字符串格式化函数
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串
- ng打开空字符串
- 正则表达式在字符串中找到base64
- 如何将字符串值从php页面发送到java脚本页面
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- 字符串在将其传递给另一个活动Android JavaScript时读取Null
- 对id以某个字符串开头的元素进行计数
- Javascript逻辑运算符和字符串/数字
- 反向字符串比较
- 如何有效地将游戏数据存储在URL查询字符串中
- 可变大小的JavaScript字符串如何成为基元类型
- 将DOM节点值与字符串Javascript进行比较
- 如何测量 JavaScript 字符串的大小
- 如何测量将JSON字符串解析为Javascript对象的时间
- 有没有一种方法可以在Google BigQuery中测量字符串的相似性
- 在Javascript中测量字符串宽度
- 在Javascript/HTML5中是否有一种好方法来测量字符串的宽度(在渲染时以像素为单位)
- 在javascript中测量字符串的像素长度