此 Codelab 介绍了如何使用字体观察器立即显示文本。
添加字体观察器
Font Face Observer 是一种用于检测字体加载时间的脚本。fontfaceobserver.js
文件已保存到项目目录中,因此您无需单独添加。不过,您需要为其添加脚本标记。
- 点击 Remix to Edit 使项目可修改。
- 将
fontfaceobserver.js
的脚本标记添加到index.html
:
<div class="text">Some text.</div>
<script src="fontfaceobserver.js" type="text/javascript"></script>
</body>
使用 Font Face Observer
创建观察者
为页面上使用的每个字体系列创建一个观察器。
- 在
fontfaceobserver.js
脚本之后添加以下脚本。此操作会为“Pacifico”和“Roboto”字体系列创建观察器:
<script src="fontfaceobserver.js" type="text/javascript"></script>
<script type="text/javascript">
const pacificoObserver = new FontFaceObserver('Pacifico');
const robotoObserver = new FontFaceObserver('Roboto');
</script>
<body>
如果您不确定需要创建哪种字体观察器,只需在 CSS 中查找 font-family
声明即可。将这些声明的 font-family
名称传递给 FontFaceObserver()
。无需为回退字体创建字体观察器。
例如,如果您的 CSS 是:
font-family: "Times New Roman", Times, serif;
则应添加 FontFaceObserver('Times New Roman')
。时间和 serif 是后备字体,因此您无需为其声明 FontFaceObserver。
检测字体加载
用于检测字体加载的代码如下所示:
robotoObserver.load().then(function(){
console.log("Hooray! Font loaded.");
});
robotoObserver.load()
是在字体加载时解析的 promise。
演示网站使用两种不同的字体,因此您需要使用 Promise.all()
等待两种字体都加载完成后。
- 将此 promise 添加到脚本中,放在您刚才声明的 FontFaceObserver 的正下方:
Promise.all([
pacificoObserver.load(),
robotoObserver.load()
]).then(function(){
/* Do things */
});
✔️ 入住
现在,您的脚本应如下所示:
<script type="text/javascript">
const pacificoObserver = new FontFaceObserver('Pacifico');
const robotoObserver = new FontFaceObserver('Roboto');
Promise.all([
pacificoObserver.load(),
robotoObserver.load()
]).then(function(){
/* Do things */
});
</script>
应用 fonts-loaded
类
- 将脚本中的
/* Do things */
注释替换为下面这行代码:
document.documentElement.classList.add("fonts-loaded");
这会在两种字体加载完毕后,将 fonts-loaded
类添加到文档的根元素(<html>
标记)。
✔️ 入住
完成后的脚本应如下所示:
<script type="text/javascript">
const pacificoObserver = new FontFaceObserver('Pacifico');
const robotoObserver = new FontFaceObserver('Roboto');
Promise.all([
pacificoObserver.load(),
robotoObserver.load()
]).then(function(){
document.documentElement.className += " fonts-loaded";
});
</script>
更新 CSS
网页应先使用系统字体,并在应用 fonts-loaded
类后使用自定义字体。
- 更新 CSS:
.header {
html.fonts-loaded .header {
font-family: 'Pacifico', cursive;
}
.text
html.fonts-loaded .text {
font-family: 'Roboto', sans-serif;
}
验证
- 如需预览网站,请按查看应用,然后按全屏 。
如果页面如下所示,则表明您已成功实现了 Font FaceObserver,并消除了“不可见文本闪烁”。