uni-app 小程序设置自定义字体
最近在开发动森的一款小程序,到目前为止踩了不少坑,今天记录一下小程序引入自定义字体的方式。后续会陆续更新其他踩坑记录。
首先,小程序是支持使用自定义字体的,使用 wx.loadFontFace() 就可以引入字体,但是使用这个 api 有一些限制:

需要特别注意的点有:
第一点:字体格式,保险起见使用 ttf 格式,如果不是 ttf 格式,可以在 https://transfonter.org/ 在线转一下。
第二点:字体链接必须是 https,意味着不支持引入本地字体。
第三点:链接必须同源或者开启了 cors 支持。
其他几点注意点对使用有影响,但没以上三点重要。
我将字体上传到了腾讯的对象存储上,因此我要在存储桶的设置中对 servicewechat.com 开启 cors 支持:
1、登录腾讯云,进入对象存储控制台
2、点击**【存储桶列表】**菜单

3、点击上传了字体的存储桶,进入存储桶详情

4、点击左侧**【基础配置】**菜单

5、找到**【跨域访问CORS设置】**卡片,点击添加规则,照下图填写表单并保存,过一会儿就会生效。

官方文档上说如果需要全局支持字体的话 wx.loadFontFace 需要在 app.js 中调用并且设置 global 为 true。
并且使用 global 属性对调试基础库版本有要求,需要 2.10.0 以上,否则字体只会在调用这个 api 的页面生效。

还有注意中提到的第四点也注意一下,可能会有个报错,但是字体实际已经生效,这个报错可以忽略。
但是我使用的是 uni-app,我尝试写在 main.js 入口文件中,但是并没有生效,不过 uni-app 支持 vue 的 mixins,创建一个font.js:
// @/mixins/font.js
export default {
onLoad() {
uni.loadFontFace({
family: 'DFYuanW9',
source: 'url("https://xxxxxxx.ttf")',
})
}
}
在 main.js 中:
import mixin from '@/mixins/font.js'
Vue.mixin(mixin)
并在全局 css 中使用字体:
page{
font-family: 'DFYuanW9'
}
这样每个页面就都会生效了。
下面是字体使用效果:
不使用字体:
使用字体: