Как мне дождаться загрузки пользовательского шрифта, прежде чем проверять свойства макета?
Когда я пытаюсь проверить ширину некоторого текста, вызывая .width()
из span
текст введен, сначала я всегда получаю неправильное значение. Тогда почему я звоню .width()
опять же, я получаю правильное значение.
Я добавляю текст, используя .append()
тогда я хочу получить ширину этого сразу. Когда я открываю свой файл напрямую через Chrome (не используя Интернет, чтобы попасть на Dropbox.com), он правильно получает значение ширины в 99% случаев. Может ли это быть проблемой загрузки?
Вот пример: https://dl.dropboxusercontent.com/u/98788053/School/test.html
<script>
$(document).ready(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>
1 ответ
jsFiddle Demo
Есть разница между document.ready
а также window.onload
в основном это document.ready
из jQuery будет фактически запускаться до полной загрузки изображений (или пользовательского шрифта в вашем случае), потому что 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>
теги.