Unikaj przebłysków niewidocznego tekstu

Katie Hempenius
Katie Hempenius

Z tego modułu dowiesz się, jak wyświetlać tekst natychmiast za pomocą Font Face Observer.

Font Face Observer (Obserwator twarzy czcionki) to skrypt, który wykrywa wczytanie czcionki. Plik fontfaceobserver.js został już zapisany w katalogu projektu, więc nie musisz go dodawać oddzielnie. Musisz jednak dodać dla niego tag skryptu.

  • Aby udostępnić projekt do edycji, kliknij Remiksuj, aby edytować.
  • Dodaj tag skryptu fontfaceobserver.js do index.html:
  <div class="text">Some text.</div>
  <script src="fontfaceobserver.js" type="text/javascript"></script>
</body>

Używanie obserwatora czcionek

Tworzenie obserwatorów

Utwórz obserwatora dla każdej rodziny czcionek, która jest używana na stronie.

  • Dodaj poniższy skrypt po skrypcie fontfaceobserver.js. Spowoduje to utworzenie obserwatorów dla rodzin czcionek „Pacifico” i „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>

Jeśli nie masz pewności, jakie obserwatory czcionek musisz utworzyć, poszukaj w CSS deklaracji font-family. Przekaż nazwę font-family tych deklaracji do narzędzia FontFaceObserver(). W przypadku czcionek zastępczych nie trzeba tworzyć narzędzia do obserwowania czcionek.

Jeśli np. Twoja usługa porównywania cen:

font-family: "Times New Roman", Times, serif;

dodasz FontFaceObserver('Times New Roman'). Times i Serif jest czcionkami zastępczymi, więc nie trzeba deklarować dla nich parametru FontFaceObservers.

Wykrywanie wczytywania czcionki

Kod służący do wykrywania obciążenia czcionki wygląda tak:

robotoObserver.load().then(function(){
  console.log("Hooray! Font loaded.");
});

robotoObserver.load() to obietnica, która jest spełniana po załadowaniu czcionki.

Witryna demonstracyjna używa 2 różnych czcionek, więc musisz użyć Promise.all(), aby poczekać, aż wczytają się oba czcionki.

  • Dodaj tę obietnicę do skryptu tuż pod zadeklarowanymi elementami FontFaceObservers:
Promise.all([
  pacificoObserver.load(),
  robotoObserver.load()
]).then(function(){
  /* Do things */
});

✔️Zameldowanie

Twój skrypt powinien wyglądać tak:

<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>

Zastosuj klasę fonts-loaded

  • Zastąp w skrypcie komentarz /* Do things */ tym wierszem:
document.documentElement.classList.add("fonts-loaded");

Gdy oba czcionki zostaną załadowane, klasa fonts-loaded zostanie dodana do elementu katalogu dokumentu (tagu <html>).

✔️Zameldowanie

Gotowy skrypt powinien wyglądać tak:

<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>

Zaktualizuj CSS

Styl strony powinien na początku używać czcionki systemowej i czcionek niestandardowych po zastosowaniu klasy fonts-loaded.

  • Zaktualizuj CSS:
.header {
html.fonts-loaded .header {
  font-family: 'Pacifico', cursive;
}

.text
html.fonts-loaded .text {
  font-family: 'Roboto', sans-serif;
}

Zweryfikuj

  • Aby wyświetlić podgląd strony, kliknij Wyświetl aplikację. Następnie kliknij Pełny ekranpełny ekran.

Jeśli strona wygląda tak, oznacza to, że udało Ci się zaimplementować Font Face Observer i uniknąć „błysku niewidocznego tekstu”.

Nagłówek w czcionce kursywie.