预加载@ font-face字体?

是否有可能预加载或caching@ font-face字体,最有可能的JavaScript,在页面加载之前,所以你没有得到这个丑陋的跳跃时,页面终于加载?

我不知道任何当前的技术,以避免字体加载闪烁,但是您可以通过发送适当的caching标头为您的字体,并确保该请求尽快通过尽量减less它。

一个简单的技术就是把它放在索引的某个地方。

<div class="font_preload" style="opacity: 0"> <span style="font-family: 'myfontface#1font-family', Arial, sans-serif;"></span> <span style="font-family: 'myfontface#2font-family', Arial, sans-serif;"></span> ... </div> 

在Chrome 34,Safari 7和FF 29以及IE 11上testing

这里有一些“预加载”的技巧: http : //paulirish.com/2009/fighting-the-font-face-fout/

主要是欺骗浏览器以尽可能快地下载文件。

你也可以把它作为一个data-uri来传递,这对你有很大的帮助。 也可以隐藏页面内容并在准备就绪时显示。

正确的字体预加载是HTML5规范中的一大漏洞。 我已经经历了所有这些东西,我发现最可靠的解决scheme是使用Font.js:

http://pomax.nihongoresources.com/pages/Font.js/

你可以使用它来加载字体使用相同的API来加载图像

 var anyFont = new Font(); anyFont.src = "fonts/fileName.otf"; anyFont.onload = function () { console.log("font loaded"); } 

它比Google笨重的Webfont Loader更简单,更轻量

这里是Font.js的github回购:

https://github.com/Pomax/Font.js

这应该可以解决你的问题。

回答你最初的问题: 是的,你可以 。 目前只有Gecko和WebKit浏览器支持它。
你只需要在你的脑海中添加链接标签:

 <link rel="prefetch" href="pathto/font"> <link rel="prerender" href="pathto/page"> 

2017:你现在有预加载

MDN:元素的rel属性的preload值允许你在你的HTML中写入声明性的提取请求,指定你的页面在加载之后很快需要的资源,因此你希望在页面加载的生命周期早期开始预加载,浏览器的主要渲染机器将会启动。这确保了它们可以更早地被使用,并且不太可能阻止页面的第一个渲染,从而提高性能。

 <link rel="preload" href="/fonts/myfont.eot" as="font" /> 

检查浏览器兼容性

这对字体预加载非常有用(不要等待浏览器在某些CSS中find它)。 您也可以预先加载一些徽标,图标和脚本。

我通过在我的主文档中添加了一些字母,并使其透明并指定了我想要加载的字体。

例如

 <p>normal text from within page here and then followed by: <span style="font-family:'Arial Rounded Bold'; color:transparent;">t</span> </p> 

最近我正在开发与CocoonJS兼容的游戏,DOM限于canvas元素 – 这是我的方法:

使用尚未加载字体的fillText将正确执行,但没有视觉反馈 – 所以canvas平面将保持不变 – 您只需定期检查canvas是否有任何更改(例如,循环查找getImageData非透明像素),这将在字体正确加载时发生。

我在最近的文章http://rezoner.net/preloading-font-face-using-canvas,686中解释了这个技术;

谷歌有一个很好的库: https : //developers.google.com/webfonts/docs/webfont_loader你可以使用几乎所有的字体和lib将添加类的HTML标签。

它甚至给你的JavaScript事件,当certrain字体加载和活动!

不要忘记提供gzipped的字体文件! 它肯定会加快速度!

通过Google的webfontloader

 var fontDownloadCount = 0; WebFont.load({ custom: { families: ['fontfamily1', 'fontfamily2'] }, fontinactive: function() { fontDownloadCount++; if (fontDownloadCount == 2) { // all fonts have been loaded and now you can do what you want } } }); 

使用标准的CSS字体加载API 。

等待( 所有 )字体加载,然后显示您的内容:

 document.fonts.ready.then((fontFaceSet) => { console.log(fontFaceSet.size, 'FontFaces loaded.'); document.getElementById('waitScreen').style.display = 'none'; }); 

演示CodePen