前端使用fontfaceobserver库实现字体设置
要使用FontFaceObserver来加载设置项目本地的字体,先确保字体文件位于项目中或者可以从服务端获取到,这样就可以使用FontFaceObserver来检测并加载这些字体
主要有以下几步:
- npm或者yarn安装引入fontfaceobserver
- 字体资源引入和font-face配置
- 使用FontFaceObserver加载字体并设置fontFamily
下面写个伪代码的示例:
首先引入字体资源,css配置字体
font.css
@font-face {font-family: '苹方 Medium';src: url('./cn/苹方 Medium.otf');
}
@font-face {font-family: '新宋体';src: url('./cn/新宋体.ttc');
}
这个style样式可以写在需要设置字体的组件中,当然也可以分开以文件的方式引入,我建议分开更好,更符合模块化
font.js
/** @Description: 字体文件列表*/const cnList = [{name: '苹方 Medium',fontFamily: '苹方 Medium',},{name: '新宋体',fontFamily: '新宋体',},
];export default [...cnList];
如果用请求实现字体列表的方式实现的话,这个可以写在需要设置字体的组件中,当然也可以分开以文件的方式引入,这种本地字体更好,我建议分开更好,更符合模块化
如过需要从服务端或者其他服务引用文件字体列表
目标文件.vue
<!-- 字体 -->
<div class="left font-selector"><Select v-model="fontAttr.fontFamily" @on-change="changeFontFamily"><Option v-for="item in fontFamilyList" :value="item.name" :key="`font-${item.name}`"><div class="font-item" v-if="!item.preview">{{ item.name }}</div><div class="font-item" v-else :style="`background-image:url('${item.preview}');`">{{ !item.preview ? item : '' }}<!-- 解决无法选中问题 --><span style="display: none">{{ item.name }}</span></div></Option></Select>
</div>//将上面编写的字体列表js文件引入
import fontList from '@/assets/fonts/font';
const fontFamilyList = ref([...fontList]);//字体请求
const getFontList = async () => {const res = await axios.get('xxx/font.json');console.log('font response', res);fontFamilyList.value = [...fontFamilyList.value,...Object.entries(res.data).map(([, value]) => value),];
};// 修改字体
const changeFontFamily = (fontName) => {console.log('changeFontFamily fontName', fontName);if (!fontName) return;// 字体加载并设置const loadingInstance = ElLoading.service(options)const font = new FontFaceObserver(fontName);console.log('font', font);font.load(null, 15000).then(() => {console.log('字体加载成功');document.documentElement.classList.add('fonts-loaded')document.body.classList.add('font-loaded');loadingInstance.close()}).catch((err) => {console.log(err);loadingInstance.close()});
};<style scoped lang="less">
@import url('@/assets/fonts/font.css');
</style>
最简单的用法如下:
<script>
const font = new FontFaceObserver('自定义字体名')
font.load().then().catch()
</script><style>@font-face {font-family: 自定义字体名;src: url('字体包路径');}
</style>
这样一个前端字体动态设置的功能就实现了。
相关文章:
前端使用fontfaceobserver库实现字体设置
要使用FontFaceObserver来加载设置项目本地的字体,先确保字体文件位于项目中或者可以从服务端获取到,这样就可以使用FontFaceObserver来检测并加载这些字体 主要有以下几步: npm或者yarn安装引入fontfaceobserver字体资源引入和font-face配置…...
【人工智能】Python常用库-PyTorch常用方法教程
PyTorch 是一个强大的开源深度学习框架,以其灵活性和动态计算图而广受欢迎。以下是 PyTorch 的详细教程,涵盖从基础到实际应用的使用方法。 1. 安装与导入 1.1 安装 PyTorch 访问 PyTorch 官方网站,根据系统、Python 版本和 CUDA 支持选择安…...
Android Studio安装TalkX AI编程助手
文章目录 TalkX简介编程场景 TalkX安装TalkX编程使用ai编程助手相关文章 TalkX简介 TalkX是一款将OpenAI的GPT 3.5/4模型集成到IDE的AI编程插件。它免费提供特定场景的AI编程指导,帮助开发人员提高工作效率约38%,甚至在解决编程问题的效率上提升超过2倍…...
#渗透测试#红蓝攻防#HW#漏洞挖掘#漏洞复现02-永恒之蓝漏洞
免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…...
gitlab自动打包python项目
现在新版的gitlab可以不用自己配置runner什么的了 直接写.gitlab-ci.yml文件就行,这里给出一个简单的依靠setup把python项目打包成whl文件的方法 首先写.gitlab-ci.yml文件,放到项目根目录里 stages: # List of stages for jobs, and their or…...
残差神经网络
目录 1. 梯度消失问题 2. 残差学习的引入 3. 跳跃连接(Shortcut Connections) 4. 恒等映射与维度匹配 5. 反向传播与梯度流 6. 网络深度与性能 总结 残差神经网络的原理是基于“残差学习”的概念,它旨在解决深度神经网络训练中的梯度消…...
mini-spring源码分析
IOC模块 关键解释 beanFactory:beanFactory是一个hashMap, key为beanName, Value为 beanDefination beanDefination: BeanDefinitionRegistry,BeanDefinition注册表接口,定义注册BeanDefinition的方法 beanReference:增加Bean…...
黑马程序员Java项目实战《苍穹外卖》Day01
苍穹外卖-day01 课程内容 软件开发整体介绍苍穹外卖项目介绍开发环境搭建导入接口文档Swagger 项目整体效果展示: 管理端-外卖商家使用 用户端-点餐用户使用 当我们完成该项目的学习,可以培养以下能力: 1. 软件开发整体介绍 作为一…...
uniapp开发支付宝小程序自定义tabbar样式异常
解决方案: 这个问题应该是支付宝基础库的问题,除了依赖于官方更新之外,开发者可以利用《自定义 tabBar》曲线救国 也就是创建一个空内容的自定义tabBar,这样即使 tabBar 被渲染出来,但从视觉上也不会有问题 1.官方文…...
python+django5.1+docker实现CICD自动化部署springboot 项目前后端分离vue-element
一、开发环境搭建和配置 # channels是一个用于在Django中实现WebSocket、HTTP/2和其他异步协议的库。 pip install channels#channels-redis是一个用于在Django Channels中使用Redis作为后台存储的库。它可以用于处理#WebSocket连接的持久化和消息传递。 pip install channels…...
python代码示例(读取excel文件,自动播放音频)
目录 python 操作excel 表结构 安装第三方库 代码 自动播放音频 介绍 安装第三方库 代码 python 操作excel 表结构 求出100班同学的平均分 安装第三方库 因为这里的表结构是.xlsx文件,需要使用openpyxl库 如果是.xls格式文件,需要使用xlrd库 pip install openpyxl /…...
【第十课】Rust并发编程(一)
目录 前言 Fork和Join 前言 本节会介绍Rust中的并发编程,并发编程在编程中是提升cpu使用率的一大利器,通过多线程技术提升效率,Rust的并发和其他编程语言的并发不同的地方在于,Rust号称无畏并发。更重要的一点是安全。Rust中所有…...
图形渲染性能优化
variable rate shading conditional render 设置可见性等, 不需要重新build command buffer indirect draw glMultiDraw* - 直接支持多次绘制glMultiDrawIndirect - 间接多次绘制multithreading 多线程录制 实例化渲染 lod texture array 小对象剔除 投影到…...
elasticsearch的索引模版使用方法
5 索引模版⭐️⭐️⭐️⭐️⭐️ 索引模板就是创建索引时要遵循的模板规则索引模板仅对新创建的索引有效,已经创建的索引并不受索引模板的影响 5.1 索引模版的基本使用 1.查看所有的索引模板 GET 10.0.0.91:9200/_index_template2.创建自定义索引模板 xixi &…...
论文学习——进化动态约束多目标优化:测试集和算法
论文题目:Evolutionary Dynamic Constrained Multiobjective Optimization: Test Suite and Algorithm 进化动态约束多目标优化:测试集和算法(Guoyu Chen ,YinanGuo , Member, IEEE, Yong Wang , Senior Member, IEEE, Jing Liang , Senior …...
C++中的volatile关键字
作用: 1.它用于修饰变量,告知编译器该变量的值可能会在程序的外部被改变,编译器不能对这个变量的访问进行优化。这是因为编译器通常会对代码进行优化,例如把变量的值缓存到寄存器中,但对于 volatile 变量,…...
linux桌面qt应用程序UI自动化实现之dogtail
1. 前言 Dogtail适用于Linux 系统上进行 GUI 自动化测试,利用 Accessibility 技术与桌面程序通信;Dogtail 包含一个名为 sniff 的组件,这是一个嗅探器,用于 GUI 程序追踪; 源码下载:dogtail PyPI 可通过sudo python setup.py install安装或sudo pip install dogt…...
Hello World C#
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System; 引入了System命名空间,基本输入输出。一般只用这个,后面的不用 using System.Collections.Generic; 包含了定…...
SAP开发语言ABAP开发入门
1. 了解ABAP开发环境和基础知识 - ABAP简介 - ABAP(Advanced Business Application Programming)是SAP系统中的编程语言,主要用于开发企业级的业务应用程序,如财务、物流、人力资源等模块的定制开发。 - 开发环境搭建 - 首先需…...
应急响应靶机——easy溯源
载入虚拟机,开启虚拟机: (账户密码:zgsfsys/zgsfsys) 解题程序.exe是额外下载解压得到的: 1. 攻击者内网跳板机IP地址 2. 攻击者服务器地址 3. 存在漏洞的服务(提示:7个字符) 4. 攻击者留下的flag(格式…...
【前端】vscode报错: 无法加载文件 D:\nodejs\node_global\yarn.ps1,因为在此系统上禁止运行脚本。
vscode运行前端代码时候,执行yarn install时候报错 问题: 无法加载文件 D:\nodejs\node_global\yarn.ps1,因为在此系统上禁止运行脚本。 解决方式: 首先用管理员身份运行vscode 查看 get-ExecutionPolicy,Restrict…...
Spring Web MVC(详解中)
文章目录 Spring MVC(中)RESTFul风格设计RESTFul风格概述RESTFul风格特点RESTFul风格设计规范RESTFul风格好处RESTFul风格实战需求分析RESTFul风格接口设计后台接口实现 基于RESTFul风格练习(前后端分离模式)案例功能和接口分析功…...
Flutter:encrypt插件 AES加密处理
1、pubspec.yaml导入插件 cupertino_icons: ^1.0.8 # 密码加密 encrypt: 5.0.3encrypt封装 import package:encrypt/encrypt.dart; /// 加密类 class EncryptUtil {static final EncryptUtil _instance EncryptUtil._internal();factory EncryptUtil() > _instance;Encrypt…...
Python bytes类型及用法
在Python中,bytes类型是一种不可变的字节序列,用于存储原始的二进制数据。bytes对象通常用于处理文件、网络通信和其他需要处理原始字节数据的场景。 以下是bytes类型的一些基本用法和特性: 1. 创建bytes对象 可以通过多种方式创建bytes对…...
阅读《基于蒙特卡洛法的破片打击无人机易损性分析》_笔记
目录 基本信息 1 引言 1.1 主要研究内容 1.2 研究必要性(为什么要研究) 1.3 该领域研究现状(别人做了什么/怎么做的) 2 主要研究过程(我们做了什么) 2.1 建立目标仿真模型 2.2 确定毁伤依据 2.3 无…...
【vim】vim怎么把某一列内容复制到另一列
1. vim 怎么把某一列内容复制到另一列 移动光标到你想复制的列的第一个字符上。按下 ctrlv 进入选择模式。按下方向键选择多行。按下 h 或 j 或 k 或 l,选择整列。按下 y 复制所选择的列。移动光标到你想粘贴内容的列的第一个字符上。按下 p 粘贴内容。...
IP划分(笔记)
IPv4 32位4字节 IPv6 128位16字节 IPv4转IPv6 前10字节全0,2字节全1,再加ipv4的4个字节 IPv4划分笔记(有类域): A类:首字节必为0b0xxxxxxx 0.0.0.0/8-127.255.255.255/8 实际范围:1.0.0.1/8-126.25…...
【ChatGPT大模型开发调用】如何获得 OpenAl API Key?
如何获取 OpenAI API Key 获取 OpenAI API Key 主要有以下三种途径: OpenAI 官方平台 (推荐): 开发者用户可以直接在 OpenAI 官方网站 (platform.openai.com) 注册并申请 API Key。 通常,您可以在账户设置或开发者平台的相关页面找到申请入口。 Azure…...
人证合一开启安全认证新时代、C#人证合一接口集成、人脸识别
在数字化转型加速推进的今天,确保用户身份的真实性和唯一性成为了各行各业关注的重点。从金融交易到在线教育,从远程办公到智慧医疗,如何高效准确地验证“你是你”变得至关重要。正是在这种背景下,翔云“人证合一”接口应运而生&a…...
EBS 中 Oracle Payables (AP) 模块的相关集成
Oracle E-Business Suite (EBS) 中的 Oracle Payables (AP) 模块是一个全面的应付账款管理系统,它不仅提供了丰富的功能来管理与供应商的财务交易,还通过与其他模块的紧密集成,实现了企业内部各个业务流程的无缝衔接。以下是 Oracle Payables…...
成都私人做网站/什么是核心关键词
虽然DOM 为与XML 及HTML 文档交互制定了一系列核心API,但仍然有几个规范对标准的DOM进行了扩展。这些扩展中有很多原来是浏览器专有的,但后来成为了事实标准,于是其他浏览器也都提供了相同的实现。 转载于:https://www.cnblogs.com/xiao-baob…...
网站建设方案的企业/百度热搜榜排名昨日
一、基础类的一句话--功能仅限于验证漏洞了,实际中太容易被查出出来:1 <?php eval($_GET["code"])?>2 <?php system($_POST["cmd"])?>相信一目了然可以看懂如何使用这类一句话。二、编码的替换的类型:1 …...
wordpress托管到github/软件编程培训学校排名
# -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt#1.导入数据 points np.genfromtxt(data.csv, delimiter,)# 提取points中的两列数据,分别作为x,y x points[:, 0]#所有行的第一列 y points[:, 1]#所有行的第二列# 用plt…...
ps网页设计流程/百度seo什么意思
访问购买页面:不过,HMD Global并没有放弃“让世界所有角落的人都加入到移动领域”的使命,宣布推出了Nokia C2这款新手机,是最新的Android Go手机。该机搭载了紫光展锐平台,处理器型号SC9832E,支持4G LTE。紫光展锐SC98…...
9377手游交易平台/seo网站推广优化
2019独角兽企业重金招聘Python工程师标准>>> binder一次跨进程通讯,只需要一次拷贝(原因后面会解析),而一般的像socket通讯则需要两次拷贝; 用户和内核空间分配了一段虚拟地址,这段虚拟地址将用于binder内存的访问。bi…...
Wordpress官网类主题/seo是干什么的
一、简介 Django 是一个开放源代码的 Web 应用框架,由 Python 写成。Django 只要很少的代码就可以轻松地完成一个正式网站所需要的大部分内容,并进一步开发出全功能的 Web 服务。Django 本身基于 MVC 模型,同时也是一个MTV模型 。Django的MTV…...