JS字体加载失败或完毕的检测

更新日期: 2022-04-28阅读: 938标签: 字体

一、开门见山

对于自定义字体,如果还没有加载完毕,就让 Unicode 字符显示,有可能会显示乱七八糟的字符,过一段时间后才显示映射后的效果。

这样的体验就不太好。

还有就是开发人员希望知道字体文件加载失败的情况,需要在加载异常的时候上报。

上面这两种场景的实现可以使用浏览器原生的 FontFace api

具体代码如下:

// 兼容性判断,防止 IE 浏览器下报错
if (window.FontFace) {
    var fontFile = new FontFace('Some Font Name', 'url(someFontUrl.woff2)');

    fontFile.load().then(function () {
        console.log('成功');
    }, function (err) {
        console.log('失败:' + err);
    });
}

我专门做了个体验demo,您可以狠狠地点击这里: FontFace load()加载成功失败demo

可以对输入框中的 URL 地址进行字体加载成功与否的判别。


二、了解 FontFace API

FontFace API 相对于把 css @font-face 一些不可控的策略搬到了 JS 中,以便我们可以灵活设置。

其支持的一些 API 属性和 @font-face 规则支持的 CSS 属性是一一对应的。

例如:

font-display

其实,上面列表中的最后 3 个CSS属性大家可能没见过,可以参见这篇文章“ ascent-override descent-override line-gap-override一锅端 ”进行了解。

另外,FontFace 接口还有如下一些只读属性和方法:

FontFace.loaded

返回一个 Promise,自定义字体加载完毕或者失败之后触发。感觉有些鸡肋,有了 load() 方法,这个属性有什么用呢?而且此方法根据我的测试,貌似要执行 load() 才有效。

FontFace.status

返回字体的状态,值可能是后面其中之一: "unloaded" , "loading" , "loaded" 或者 "error" 。

FontFace.load()

触发自定义字体加载,可以是 URL 地址,也可以是字体的 buffer 资源,返回值是个 Promise,成功后返回当前 FontFace 对象。

简单的使用示意:

var fontFile = new FontFace('Some Font Name', 'url(someFontUrl.woff2)');

fontFile.load().then(function (fontface) {
    // 打印值是 'Some Font Name'
    console.log(fontface.family);
});

兼容性

除了个别比较新的属性值,FontFace API 的兼容性如下图所示,浏览器2014年就已经支持。



三、鸣金收兵

看了下,还有个名叫 FontFaceSet 的 API,这个 API 一般和 document.fonts 一起使用,主要对文档里面的自定义字体进行批量的处理

以后遇到相关的需求我再做相关的介绍。

另外,如果想要兼容 IE 浏览器,可以使用传统的 XMLHttpRequest GET 请求模拟,onLoad 之后执行相关的处理,示意:

// 传统实现
var xhr = new XMLHttpRequest();
xhr.open('get', 'someFontUrl.woff2');
xhr.onload = function () {
    console.log('加载成功!');
};
xhr.onerror = function () {
    console.log('加载失败!');
};
xhr.send();
本文地址: https://www.zhangxinxu.com/wordpress/?p=10388


链接: https://fly63.com/article/detial/11413

H5禁止微信内置浏览器调整字体大小

微信webview内置了调整字体大小的功能,用户可以根据实际情况进行调节。但是这也会导致字体大小改变以后,出现页面布局错乱的情况。

CSS3样式_实现字体发光效果

text-shadow 属性仅仅是用来设置文本阴影的,似乎并不能实现字体发光效果。其实不然,这正是 text-shadow 属性的精妙之处。当阴影的水平偏移量和垂直偏移量都为0时,阴影就和文本重合了。这时,如果增大阴影模糊的距离,就可以达到字体外发光的效果了。

css3 文字闪烁效果_html实现文字闪烁代码的多种形式

这篇文章总整理了3种文字闪烁效果,主要使用到css3的animation属性,闪烁效果包括:通过改变透明度来实现文字的渐变闪烁、通过设置text-shadow的值,来实现文字阴影闪烁的效果、利用背景图片或者背景渐变,实现文字颜色的闪烁效果

css3 自定义字体_使用@font-face方式实现个性化字体

当我们在浏览一些网站时发现,里面含有一些十分个性的字体,这些字体并不是我们电脑上安装的字体。那么css是如何实现自定义字体的呢?在css3中可以通过@font-face模块,把自己定义的Web字体嵌入到你的网页。

前端开发你该知道的字体 font-family

小小的字体其实有大大的学问,可能与字体相关的很多知识都偏设计,不过俗话说技多不压身,艺高人胆大,多了解了解总归没错。就 Web 常用的一些字体而言,经常听说的字体类型,大致可以分为这几种

css蚀刻字体_css3如何实现蚀刻文本?

css3利用text-shadow属性来实现蚀刻文本,创建文本显示为“蚀刻”或刻在背景中的效果。背景必须比阴影暗,效果才能发挥作用。 文字颜色应该稍微褪色,使其看起来像是刻在背景上的。

字体是如何渲染的?影响字体渲染的因素

Web 服务器返回的 HTTP 头中的 Content-Type: text/html; charset= 信息,这一般有最高的优先级;网页本身 meta header 中的 Content-Type 信息的 charset 部分,对于 HTTP 头未指定编码或者本地文件,一般是这么判断;假如前两条都没有找到,浏览器菜单里一般允许用户强制指定编码;

CSS3 font-face使用

在 CSS3 之前,web 设计师必须使用已在用户计算机上安装好的字体。通过 CSS3,web 设计师可以使用他们喜欢的任意字体。当您找到或购买到希望使用的字体时,可将该字体文件存放到 web 服务器上,它会在需要时被自动下载到用户的计算机上

如何实现label长度固定,文字分散分布的效果

这种效果主要通过text-align-last属性来实现。text-align-last:规定如何对齐文本的最后一行,当文本只有一行的时候,text-align属性不设置,text-align-last也是有用的。当然这只是针对非IE和Safiri而言。

FontAwesome 图标字体库的使用

在前端开发中,许多新手常会遇见一个问题,参考的网页上有类似下图的图标,但在资源里却找不到对应的文件,这是因为这些网页使用了图标库。这里介绍一种常见的图标库——FontAwesome的使用。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!