11

我的项目需要大约 150 种字体。最初加载所有字体会增加页面加载时间。

我尝试谷歌搜索,但找不到答案。

设想:

option用户将从<select>标签中选择一种字体。单击后,我必须动态检索字体并确保字体由浏览器呈现,然后使用该字体来避免无样式文本 (FOUT) 的 Flash

目前我正在使用AJAX请求该字体文件

      $.ajax({
      type: 'GET',
        url: "font-file-url",
        async:false,
        success: function(data) {
            $("style").prepend("@font-face {\n" +
            "\tfont-family: \""+fontValue+"\";\n" + 
            "\tsrc: local('☺'), url("font-file-url") format('opentype');\n" + 
            "}");
         }
      });

问题

我不知道浏览器何时渲染字体,所以我最终显示FOUT

4

3 回答 3

12

可能有点晚了,但我使用Google 的 WebfontLoader Library完成了它。它为我完成了这项工作。

这就是我实现的方式:

第一步: 包含库的JS文件

第2步:下面的代码对我有用

WebFont.load({
google: {
  families: ['Droid Sans']
},
timeout:5000,
fontactive: function(familyName,fvd){ //This is called once font has been rendered in browser
    // Your business logic goes here

  },
});

除了谷歌字体,您还可以加载自定义字体。库还提供了各种回调函数和其他很酷的东西。您可以查看上面的链接。

于 2017-06-29T10:49:51.087 回答
2

不幸的是,JavaScript 不支持 100% 加载字体。但有一项工作可以在未来支持它:

https://developer.mozilla.org/en-US/docs/Web/API/CSS_Font_Loading_API https: //drafts.c​​sswg.org/css-font-loading/

于 2017-02-08T01:39:25.433 回答
2

您现在可以使用字体加载 API来检测所有字体何时已加载。这应该适用于大多数现代浏览器。

// Wait until all fonts are loaded:
document.fonts.ready.then(() => init());
于 2020-07-20T07:26:38.070 回答