在正确的时间加载缓存的字体
loading cached fonts at the right time
我有一些通过Webfontloader加载的Web字体,如下所示。。。
<script src="//ajax.googleapis.com/ajax/libs/webfont/1.5.10/webfont.js"></script>
<script>
WebFont.load({
custom: {
families: ['BlenderProBook', 'BlenderProMedium']
}
});
</script>
第一次加载页面时效果很好。。。问题是,当刷新页面时,它只会在html中请求时检索缓存的字体,而不是在我的ReactJS应用程序运行之前(当Webfontloader正常获取它们时)。这对我来说太晚了,因为我正在预生成的SVG中使用它们。
有没有办法强迫它每次都获得未缓存的字体?或者更好的是,在正确的时间加载缓存的字体。
我找到了一个解决方案,如果没有其他人能提供更好的解决方案,我会把它作为我的答案。
我的字体在应用程序中被广泛用于计算文本宽度,因此布局。。。(这就是为什么它需要在应用程序运行之前加载),所以我决定使用文本宽度代码作为测试来阻止应用程序运行。
这是代码
var testFont = require('./components/svgText.js');
var timer = setInterval(function () {
var test = (testFont('TEST', 'BlenderProBook', 20).width === 39.75);
if (test) {
clearInterval(timer);
Router.run(routes, function (Handler) {
React.render(<Handler/>, document.body);
});
}
}, 50);
其中svgTest.js
使用Raphael SVG生成SVG文本并检索测量值,如下所示:-
renderedTextSize = function (string, font, fontSize) {
var paper = Raphael(0, 0, 0, 0);
paper.canvas.style.visibility = 'hidden';
var el = paper.text(0, 0, string);
el.attr('font-family', font);
el.attr('font-size', fontSize);
var bBox = el.getBBox();
paper.remove();
return {
width: bBox.width,
height: bBox.height
};
};
module.exports = renderedTextSize;
这似乎运行得很好,尽管在测试一个神奇的数字(宽度)时感觉有点麻烦。
相关文章:
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- 用Javascript更改我网站上的字体大小
- 如何在从浏览缓存加载页面时执行javascript
- 不同字体的字母间距不同
- ReactJS和SpringDataRest缓存问题可能与websocket有关
- 如何在谷歌字体加载时显示加载图像
- 缓存谷歌地图数据
- PhoneGap选项卡栏自定义字体,背景图案
- 防止jQuery Mobile中的ajax缓存
- 每个选择器的Jquery css颜色都在变化,但字体大小却没有变化
- image.onload事件和浏览器缓存
- Javascript清除缓存以清除基本身份验证凭据
- 使用jquery.load('pageName')方法时,未从应用程序缓存加载Html页
- 将脚本缓存到本地存储的basket.js概念仍然是一个好主意吗
- 阻止选项卡缓存jquery ui
- 强制浏览器更新缓存的HTML5视频对象
- 如何保护节点webkit应用程序上的字体
- 在Javascript中使用全局变量作为缓存是很好的
- 在正确的时间加载缓存的字体
- 以下可缓存资源有一个短的新鲜度生命周期-谷歌字体