js加载第三方字体,检测加载完成事件

最近在做一个项目涉及到加载第三方字体的问题,首批需要支持一百多种字体,然后首先想到的就是@fant-face,但是在实际应用中发现无法满足当前需求. 目前的项目是用canvas的一个开源库fabric.js实现图片和文字的拖动,放大,缩小,旋转等操作,需要对文字设置不同字体的功能,首先就用的@fant-face,因为之前没用过,本来以为是只要用@fant-face定义的字体文件会在页面加载就去加载字体文件,实践发现并非这样,本来还想着在选择字体的时候再去动态添加对应文字的@fant-face,后来发现只有在页面中有用到这个字体时才回去加载,那就不用那么麻烦了,直接全部写入css中. 但是又遇到了一个问题,就是在fabric.js创建的canvas画布中,只有在第一次设置字体的时候如果字体已经加载完成才能渲染成功,否则就渲染不成功,那只能想其他办法了. 然后就去搜了一大堆监控字体加载完成相关的,最后发现了一个神器document.fonts,接下来就介绍一下怎么使用.

//加载字体文件
   obj格式,cssValue为自定义字体的名字,url为自定义字体的文件路径
    loadFont(obj){
        if(document.fonts&&!this.checkFont(obj.cssValue))
        {
            let that=this;
            let fontFamily=obj.cssValue;
            console.log(obj);
            let fontFace = new FontFace(obj.cssValue, `local('${obj.cssValue}'),url('${obj.url}') format('ttf'),url('${obj.url}')`);
            fontFace.load().then(function(loadedFontFace) {
                document.fonts.add(loadedFontFace);
                that.canvasDemo.updateTextFontFamily(fontFamily);
            });
        }
    },
    //检测字体文件是否已加载
    checkFont(name){
        let values=document.fonts.values();
        let isHave=false;
        let item=values.next();
        while(!item.done&&!isHave)
        {
            let fontFace=item.value;
            if(fontFace.family==name)
            {
                isHave=true;
            }
            item=values.next();
        }
        return isHave;
    }

这样就可以监控到字体加载完成的事件,然后在完成事件中去更新canvas的文字内容了.目前发现document.fonts不支持ie,在ff中会自动缓存字体文件,但是在chrome中无法缓存,刷新页面之后在使用的话document.fonts中就找不到相关的字体了,加了local()也无法缓存,目前还未解决此问题.

转载于:https://www.cnblogs.com/bjf784022747/articles/10337004.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
elementUI 是一个基于 Vue.js 的桌面端组件库,提供了一套丰富的 UI 组件,方便开发者快速搭建界面。在 elementUI 中,使用了第三方字体图标来增加组件的美观性和可定制性。 elementUI 使用的第三方字体图标库是阿里巴巴的矢量图标库 iconfont。使用 iconfont 字体图标可以避免图片加载,减小了页面的加载压力,并且可以通过 CSS 的方式来自由调整字体的颜色、大小、旋转等样式,使得图标的使用更加方便灵活。 在 elementUI 中,我们可以通过以下步骤来使用第三方字体图标: 1. 在阿里巴巴矢量图标库(iconfont)中搜索需要的图标,并添加至购物车。 2. 在购物车中将选中的图标添加至项目,并进行下载。 3. 下载后解压得到的文件中,找到包含字体文件和 CSS 文件的目录。 4. 将 CSS 文件中的引用路径修改为项目中正确的路径。 5. 在项目的入口文件(如 main.js)中引入 CSS 文件: ```javascript import 'path/to/iconfont.css'; ``` 6. 在需要使用图标的组件中,使用 `<el-icon>` 标签,并通过 `icon-class` 属性来指定图标的类名: ```vue <template> <div> <el-icon icon-class="iconfont icon-xxx"></el-icon> </div> </template> ``` 其中,`icon-xxx` 为图标的类名,可以在下载的 CSS 文件中找到对应类名。 通过上述步骤,我们可以很方便地在 elementUI 中使用第三方字体图标,并根据需要进行自定义样式的调整。同时,elementUI 也提供了一些默认的内置图标,供开发者直接使用,方便快捷。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值