23

所以基本的工作流程是这样的:

  1. 字体的异步文件上传(这已经完成)。

  2. 获取 URL(完成)。

  3. 将字体更改为新 URL。

我意识到这需要通过字体来完成,但我似乎无法弄清楚如何通过 JavaScript 访问它。

4

4 回答 4

40

您可以使用规则创建一个新<style>元素@font-face并将其附加到document's head

var newStyle = document.createElement('style');
newStyle.appendChild(document.createTextNode("\
@font-face {\
    font-family: " + yourFontName + ";\
    src: url('" + yourFontURL + "') format('yourFontFormat');\
}\
"));

document.head.appendChild(newStyle);

当然,您可能还需要提供所有必要的字体格式和 URL,除非您只担心对现代桌面浏览器的支持(在这种情况下,您只需使用 WOFF——我认为这是合理的,因为您提到的其他功能)。

于 2012-07-06T02:51:31.487 回答
15

定义一个 FontFace 对象

new_font = new FontFace('conthrax', 'url(fonts/conthrax-sb.ttf)')

调用它的 load 方法来下载字体

new_font.load().then(function(loaded_face) {
    // use font here

}).catch(function(error) {

});

...这会返回一个 Promise,它在解析时会传递加载的 FontFace。

将加载的字体添加到文档中

new_font.load().then(function(loaded_face) {
    // use font here
    document.fonts.add(loaded_face)
}).catch(function(error) {

});
于 2019-03-16T19:07:30.433 回答
2

尝试这样的事情:

let font = new FontFace("ExampleFont", 'url(ExampleFont.woff2) format("woff2")');
font.load().then(function(loadedFont)
{
    document.fonts.add(loadedFont);
    //do something after the font is loaded
}).catch(function(error) {
    // error occurred
});
于 2020-06-06T10:01:14.333 回答
0

使用 js 在文档中创建样式元素,然后将 TextNode 子元素附加到它。简单功能:

function loadFont(name,url){
    var newStyle = document.createElement('style');
    newStyle.appendChild(document.createTextNode('@font-face{font-family: '+name+'; src: url('+url+');}'));
    document.body.appendChild(newStyle)
}

使用示例:

loadFont("bonbon","fonts/bonbon.ttf");
于 2021-08-30T12:32:14.327 回答