如何知道是否已经加载了一个字体(@字体)?

在前端开发中,我们可能需要使用自定义字体(如Google Fonts),但有时候加载这些字体的时间可能很长。为了避免页面显示问题,我们需要确保字体已经成功加载才可使用。

本文将介绍如何判断字体是否已经加载,以及在加载完成之前暂时使用备用字体来避免页面显示问题。

判断字体是否已经加载

方法一:CSS Font Loading API

CSS Font Loading API 是用于字体加载的原生API,支持通过 JavaScript 检测字体是否已经加载完成。可以通过检查 document.fonts 对象的 fontface 规则列表来确定字体的加载状态。

示例代码:

------------------------------------ -
  ---------------- ----- --- ---------
---

上述代码在所有字体都加载完毕后输出 "All fonts are loaded"。

方法二:FontFaceSet API

FontFaceSet API 是 CSS Font Loading API 的替代方案,提供更多控制和信息。可以通过检查 document.fonts 对象的 size 和 ready 属性来确定字体的加载状态。

示例代码:

-- -------------------- --- -- -
  --------------- ----- ---- ---- ------ ------
- ---- -
  ------------------ ---- ------- ---- ---------
-

上述代码在字体未加载时输出 "No fonts have been loaded yet",在字体加载完成后输出 "Fonts have already been loaded"。

使用备用字体

在字体尚未加载完成时,为了避免出现页面显示问题,我们可以使用备用字体代替。CSS 提供了 font-display 属性来控制字体的加载和渲染行为。

示例代码:

---------- -
  ------------ -------- ------
  ---- ------------------------- ----------------
  ------------- ---------
-

上述代码中,font-display: fallback 表示使用备用字体直到 Example Font 字体加载完毕。其他可选值包括:

  • auto:根据用户设备及网络状况自动选择最佳方案。
  • block:暂时不显示文本,直到字体加载完毕再显示。
  • swap:立即使用备用字体代替,然后异步加载 Example Font 字体,当字体加载完毕后再重新显示。

结论

通过 CSS Font Loading API 和 FontFaceSet API可以判断字体是否已经加载完成,而 font-display 属性则可用于在字体尚未加载完成时使用备用字体。这些技术可以帮助我们解决字体加载慢导致的页面显示问题。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/12545


猜你喜欢

  • 使用 getElementsByClassName 返回的数组执行 forEach 时出现 “TypeError: undefined is not a function” 的问题

    在前端开发中,我们经常会使用 getElementsByClassName 方法来获取一个或多个元素。该方法返回的是一个类似数组的对象,它们可以被遍历和访问,很多人习惯使用 forEach 对这个对象...

    7 年前
  • 如何在jQuery中存储全局值

    在Web开发中,我们常常需要在不同的函数或方法中共享数据。在jQuery中,可以通过多种方法来存储全局值,包括使用全局变量、data()方法、以及$.fn.extend()方法等。

    7 年前
  • TinyHippos注入脚本的目的和实现方法

    在前端开发中,我们经常需要模拟各种设备和浏览器环境来测试我们的网站或应用程序。这时候,TinyHippos注入脚本就能派上用场。 目的 TinyHippos注入脚本的主要目的是模拟移动设备的浏览器环境...

    7 年前
  • 为什么document.body为空我的JavaScript呢?

    在前端开发中,有时候我们会遇到document.body为空的问题。这种情况通常发生在我们想要修改或操作DOM时。 什么是document.body? 在了解为什么document.body为空的问题...

    7 年前
  • 如何检测是否一个iframe加载?

    在Web开发中,我们经常需要将其它网页或应用程序嵌入到当前页面中。这时,我们通常会使用HTML中的iframe元素来实现。然而,在一些情况下,我们需要知道iframe是否已经成功加载,才能继续执行后续...

    7 年前
  • 被污染的画布可出口:Canvas 的图片导出技术

    在前端开发中,我们经常会用到 Canvas 来绘制各种图形,但是有时候我们需要将 Canvas 中的图形导出为图片,以便于分享、打印等用途。本文将介绍如何实现 Canvas 图片导出,并解决在此过程中...

    7 年前
  • 以编程方式选择在contenteditable HTML元素的文本

    背景 在前端开发中,有时需要对页面上的可编辑元素 (contenteditable) 进行操作。这些操作包括选择、插入、删除文本等等。在此过程中,我们需要通过 JavaScript 来操作 DOM 树...

    7 年前
  • 美元指数在 Knockout.js 模型中的应用

    引言 Knockout.js 是一种轻量级的 JavaScript 库,用于创建适用于页面和用户界面交互的数据模型。在前端开发中,经常需要使用到 Knockout.js 来实现数据双向绑定、视图渲染等...

    7 年前
  • 如何使用JavaScript删除HTML元素?

    在前端开发中,有时候需要动态地删除HTML元素。JavaScript是一种常用的语言,可以轻松地实现这个功能。本文将介绍如何使用JavaScript删除HTML元素的详细步骤。

    7 年前
  • 使用 Backbone.js 和 jQuery 构建前端应用

    Backbone.js 是一个轻量级的 JavaScript 库,用于构建单页 Web 应用程序。它提供了一组简单易用的模型、视图和控制器等组件,以帮助开发人员构建可扩展的 Web 应用程序。

    7 年前
  • 如何将对象序列化为一个参数列表?

    当我们需要将一个 JavaScript 对象转换为一个字符串,以便于在网络传输中或者在存储时使用,一种常见的方式就是将其序列化为一个参数列表。在本文中,我们将深入探讨如何将对象序列化为这样一个参数列表...

    7 年前
  • 使用jQuery格式化电话号码

    在前端开发中,我们经常需要将不同格式的电话号码转换成一种标准的格式。jQuery是一个流行的JavaScript库,可以帮助我们轻松地完成这个任务。 为什么要格式化电话号码? 在许多情况下,电话号码以...

    7 年前
  • 如何暂停YouTube播放器时,隐藏的iframe?

    在前端开发中,我们经常需要使用到嵌入式视频来增加网站的多媒体内容。其中,YouTube是最受欢迎的嵌入式视频平台之一。然而,在某些情况下,我们可能需要在用户暂停视频播放时隐藏嵌入式iframe。

    7 年前
  • 在谷歌地图中画一个点周围的半径

    在地图应用程序中,通常需要将地图上的地点与其他位置进行比较。为此,可以使用圆形标记或半径来表示地点的范围。本文将介绍如何在谷歌地图上绘制一个点周围的半径。 前置技能和知识 基本的 HTML, CSS...

    7 年前
  • JavaScript reduce() 方法详解

    在 JavaScript 中,reduce() 是一种非常有用的方法,它可以帮助我们对数组进行迭代和归约操作。使用 reduce() 可以将一个数组转换为单个值,并且能够更加灵活地处理数据。

    7 年前
  • 如何检查十六进制的颜色是否“太黑”?

    在前端开发中,我们常常需要用到颜色来设计网页或者移动应用程序。但是,有时候我们会遇到一些问题,比如一个颜色可能看起来很好,但是实际上在某些情况下会显得“太黑”,或者说太暗了。

    7 年前
  • 查找与给定输入相关联的HTML标记

    在前端开发中,有时候需要根据用户的输入来寻找与之相关联的HTML标记。这在实现自动完成、搜索提示等功能时非常有用。本文将介绍如何使用JavaScript和jQuery来实现这一功能。

    7 年前
  • 前端文件导入:输出/索引

    在前端开发中,经常需要将不同的 JavaScript 文件导入到一个项目中。这些文件可能包含函数、类、变量或其他功能,它们可以被使用来构建应用程序。 在本文中,我们将探讨两种常见的文件导入方法:输出和...

    7 年前
  • 利用谷歌浏览器开发工具过滤网络请求的方法

    在前端开发中,我们经常需要查看网页发送的网络请求,但是当一个页面有大量请求时,很难快速定位到我们想要的请求。而谷歌浏览器开发工具提供了一种强大的网络请求过滤功能,可以让我们轻松地找到特定的请求。

    7 年前
  • 通过变量来使用next()在Express.js未来中间件

    Express.js是流行的Node.js Web应用程序框架,它提供了简单易用的API和丰富的功能。其中,中间件是Express.js的核心特性之一,它使得在请求和响应之间执行操作变得容易。

    7 年前

相关推荐

    暂无文章