本程式碼研究室課程將說明如何使用 Font Face Observer 立即顯示文字。
新增字體面觀察器
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>
使用字型面觀察器
建立觀察者
為每個在頁面上使用的字型系列建立觀察器。
- 在
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')
Times 和 serif 是備用字型,因此您不需要為這些字型宣告 FontFaceObserver。
偵測字型載入
用於偵測字型載入的程式碼如下所示:
robotoObserver.load().then(function(){
console.log("Hooray! Font loaded.");
});
robotoObserver.load()
是字型載入時解析的承諾。
示範網站使用兩種字型,因此您必須使用 Promise.all()
等待兩個字型都載入完畢。
- 將這個應許加入指令碼,位於您剛宣告的 FontFaceObservers 正下方:
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;
}
驗證
- 如要預覽網站,請按下「View App」,然後按下「Fullscreen」。
如果頁面大致如下,您已成功實作 Font Face Observer,同時移除「隱形文字的 Flash」。