javascript - 如何知道何时应用了 font-face

标签 javascript jquery font-face domready

我目前正在为广泛使用自定义字体的客户构建公司网站。

在 jQuerys DOM-ready 上,我正在进行位置计算,以根据动态内容确定一些具有动态宽度和高度的弹出菜单应该放置在何处。

这些计算失败了,因为在应用 font-face 之前触发了 DOM-ready,因此宽度和高度不正确。

现在(对于原型(prototype))我正在 DOM 准备好后 500 毫秒进行计算,以缓解这个问题,但由于显而易见的原因,这不能投入生产。

该问题已在最新的 Firefox 和 chrome 中观察到。 IE 8 似乎没有问题,但是 DOM-ready 触发相当晚,所以我猜延迟是内置的:)

等待加载事件不是一个选项,所以我的问题是:

是否有可靠的跨浏览器方法来检测何时应用了 font-face?

最佳答案

在想知道为什么 IE 不会遇到这个问题后,我找到了解决方案。

Firefox 和 Chrome/Safari 在应用 font-face 之前触发 DOMContentLoaded 事件,从而导致问题。

解决方案是不监听 DOMContentLoaded 而是老派监听 onreadystatechange 并等待 document.readyState === 'complete' 总是在应用 font-face 后触发(据我的测试所知)——这当然是 IE 中经常发生的事情,因为它不支持 DOMContentLoaded

所以基本上您可以在名为 fontfaceapplied 的 jQuery 中滚动您自己的事件 - 也许它应该内置 ;)

document.onreadystatechange = function() {
    if (document.readyState === 'complete') 
        $(document).trigger('fontfaceapplied');
};

有趣的事实:Opera 正确 并等待触发 DOMContentLoaded,直到应用 font-face。

关于javascript - 如何知道何时应用了 font-face,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6677181/

相关文章:

php - 寻找有关如何使用 PHP 构建私有(private)消息系统的教程

javascript - react 导航和状态栏颜色在 View 更改时闪烁

javascript - jquery grid 第二次加载时不工作

javascript - 将 1 个数据集加载到选择元素中并过滤搜索另一个端点

jquery - CSS - 选择器的使用不正确?

css - 使用 css 的自定义 css 仅适用于主页而非整个网站

html - 某些字体不适用于@font-face?

javascript - 当变量通过 URL 传递时,PHP 页面加载空白

javascript - 通过 JavaScript 更改字体

javascript - 如何在循环中将 json 数据显示为 HTML