我一直在处理与自定义Web字体和fabric.js有关的问题。我的应用程序使用了很多自定义Web字体,当我向画布添加iText时,我会初始化它们:
var text = new fabric.IText("My Text", {
fontFamily: "Some Custom Font Family",
fontSize: 50,
top: 0,
left: 0,
fill: "#000000"
});
canvas.add(text);
canvas.bringToFront(text);
canvas.setActiveObject(text);
canvas.renderAll();
这可以工作,但只有当我点击画布上的iText并与其交互时。一旦字体加载完成,就不再是问题。问题在于最初以及第一次添加iText。
我做了很多研究,找到了这个主题:
但那没有帮助我。那里提供的jsfiddle有完全相同的问题:
只需用刷新后的浏览器(例如Chrome CMD + Shift + R)打开此fiddle即可。您将看到一旦打开fiddle,自定义Web字体未加载,但是当您单击右侧的iText时会立即加载。
现在,我们该如何解决?
建议的方法是将useNative
设置为false,让Cufon来渲染文本,但这没有起作用。
我像这样在CSS文件中加载Web字体:
@font-face {
font-family: 'ApolloASM';
src: url('ApolloASM-webfont.eot');
src: url('ApolloASM-webfont.eot?#iefix') format('embedded-opentype'),
url('ApolloASM-webfont.woff2') format('woff2'),
url('ApolloASM-webfont.woff') format('woff'),
url('ApolloASM-webfont.ttf') format('truetype'),
url('ApolloASM-webfont.svg#apollo_asmregular') format('svg');
font-weight: normal;
font-style: normal;
}
https://fonts.googleapis.com/css?family=Font
而不是https://fonts.googleapis.com/css?family=Font:100, 200,400,900
可以正常工作,我猜测这是因为加载时间更短。足够“快速”在canvas
之前加载。 - Horacio