在 Fabric 画布上使用自定义字体时,建议使用 CSS 字体加载 API。
如果不这样做,你的应用程序可能会出现 FOUT(无样式文本闪烁,Flash of Unstyled Text)的问题。
这是因为字体加载涉及网络请求并且是异步的,因此当你添加一个使用自定义字体的文本对象,或者切换字体时,画布会在字体实际加载之前尝试渲染,浏览器会回退到指定的后备字体或默认字体。
如果你的目标浏览器暂时不支持该 API,你可以选择一些字体预加载库,如 Font Face Observer。
在这个示例中,我们使用浏览器原生的 CSS 字体加载 API 从 Google 的 CDN 加载 2 个 Google 字体。
我们先加载字体,然后创建一个文本框,并使用已加载的字体系列。请注意,你可以先创建文本框,添加到画布,然后在字体加载完成后重新渲染。
这样做可能会导致 FabricJS 缓存中保存了一些使用未正确加载字体计算的值,并且很可能会出现 光标定位问题 或 错误的边界框问题。
因此,请确保在字体正确加载后再指定字体系列。
当处理具有多个粗细和样式的字体时,最好为每个粗细和样式分配不同的字体系列,并使用不同的字体系列。在示例代码中,我们展示了如何使用相同的字体名称加载不同粗细的字体,但请注意,一种字体文件只包含一种字体家族、一种粗细和一种样式。
加载字体 Lato
并不意味着你可以访问该字体的所有变体,而仅仅是其中一个变体。每个变体对应一个字体文件。