在检查布局属性之前,如何等待加载自定义字体?

时间:2013-05-21 22:16:57

标签: jquery custom-font

当我尝试通过调用文本所在的.width()的{​​{1}}来检查某些文本的宽度时,我总是得到一个错误的值。那么为什么我再次打电话给span,我得到正确的价值。

我正在使用.width()添加文本,然后我想立即获得它的宽度。当我直接通过Chrome打开我的文件(不使用互联网访问Dropbox.com)时,它会在99%的时间内正确获取宽度值。这可能是一个加载问题吗?

这是一个例子: https://dl.dropboxusercontent.com/u/98788053/School/test.html

.append()

1 个答案:

答案 0 :(得分:1)

jsFiddle Demo

document.readywindow.onload之间存在差异,主要是jQuery中的document.ready实际上会在图像完全加载之前触发(或者在您的情况下是自定义字体),因为DOM在技术上是准备好了。

对于那种情况,我建议你试试这个:

<script>
window.onload = function(){
  $("body").append("<span id=\"element\">Text to measure</span>");
  $("body").append("<div id=\"thewidth\"></div>");
  $("body").append("<input type=\"button\" value=\"Try again\" onclick=\"getWidth();\">");
  getWidth();
};
function getWidth()
{
  $("#thewidth").html($("#element").width()+"px");
}
</script>

几乎有效。还有再一步。为了完全预加载字体,您需要在页面上有一个元素来触发加载。它可以为空,此示例不会影响您的布局:

<span style="font-family: JennaSue;visibility:hidden;"></span>

从我的测试中,你不能从头部的脚本中做到这一点,它必须在<body>标签内完成。