当前位置: 首页 > news >正文

UniappX动态引入在线字体图标,不兼容css时可用。

优缺点

优点:不需要占用本地存储,可直接在线同步库图标,不用再手动引入ttf文件,不用手动添加键值对对应表。

缺点:受网速影响,字体库cdn路径可能会更改,ios端首次加载,可能会无图标(详见: ios无授权请求不了网络)。

开发可用线上修改,生产用本地文件。

1.通过css url获取获取唯一标识对应的ttf文件

这里使用的是codesign的示例,阿里巴巴矢量图同理

uni.request<String>({
				// css路径,即最初提供的路径
				url: "https://cdn2.codesign.qq.com/icons/5OjE7NgEbM8mM03/latest/iconfont.css",
				success: (res : RequestSuccess<string>) => {
					// 会将内容以文本返回
					this.extractCssContent(res.data!)
					// codesign的唯一标识是t,根据正则或者字符串处理方法,求得t标识的值
					const match = res.data!.toString().match(/url\('.*?[\?&]t=([^&']*)/)! as String[];
					uni.loadFontFace({
						global: true,//应用到全局
						family: 'LYIcon',//自定义字体名称
						//                                                                              求得的值的下标为1
						source: `https://cdn2.codesign.qq.com/icons/5OjE7NgEbM8mM03/latest/iconfont.ttf?t=${match[1]}`,
					})
				}
			})

css解析 为键值对

function extractCssContent(cssText : string) {
				// 解析为{ name:'e001' }样式的键值对
				let icons = cssText.split('.icon-').slice(1).reduce((prev : UTSJSONObject, i : string) : UTSJSONObject => {
					let key = (i.split(':') as string[])[0];
					let val = ((((i.split('content:') as string[])[1].split(';') as string[])[0]).split('\\') as string[])[1].slice(0, -1);
					prev.set(key, val)
					return prev
				}, {} as UTSJSONObject);
				ConfigStore.setIcons(icons);
			}

2.解析后的文件使用

计算Unicode码

// 映射表
	const reflect = {
		'play-custom': 'play'
	};
	const calcText = (key : string) : String => String.fromCharCode(parseInt('e001')!, 16))
	// 解析字符串                                                            icons是存储的对象              为防止重名冲突,reflect为映射表          parseInt解析16位字符为10进制
	const calcText = (key : string) : String => String.fromCharCode(parseInt(icons.value.getString(key in reflect ? reflect.getString(key)! : key)!, 16))

使用

<text>{{calcText('play-custom')}}</text>


文章转载自:

http://QsngU7BU.zrdhd.cn
http://Z1MM3xkK.zrdhd.cn
http://heB11WVh.zrdhd.cn
http://gHECxPvd.zrdhd.cn
http://7YunPUIC.zrdhd.cn
http://FEkDQL0S.zrdhd.cn
http://HKdZNE9L.zrdhd.cn
http://GjajTGZv.zrdhd.cn
http://v6fwq6vA.zrdhd.cn
http://CvROZU0A.zrdhd.cn
http://wzWLntRK.zrdhd.cn
http://RUpzbARb.zrdhd.cn
http://xzczW86S.zrdhd.cn
http://kAdzmvxw.zrdhd.cn
http://isHMsReT.zrdhd.cn
http://hbYEgBKC.zrdhd.cn
http://CnbHyu2T.zrdhd.cn
http://T5lP3ARh.zrdhd.cn
http://vHS50dVw.zrdhd.cn
http://cAH7LWTB.zrdhd.cn
http://uzeTKSa0.zrdhd.cn
http://elj95daZ.zrdhd.cn
http://vEluaQYK.zrdhd.cn
http://56O9QTiR.zrdhd.cn
http://n5DYUNNN.zrdhd.cn
http://rGB7XNdb.zrdhd.cn
http://UZtvbKHs.zrdhd.cn
http://WNMnb9kZ.zrdhd.cn
http://9STqU71g.zrdhd.cn
http://I98hRwqU.zrdhd.cn
http://www.dtcms.com/a/118982.html

相关文章:

  • 《P3601 签到题》
  • 力扣hot100【链表】
  • 克魔助手(Kemob)安装与注册完整教程 - Windows/macOS双平台指南
  • IMS V 6即将破解制造业数字化转型“难题”!
  • WEB安全--内网渗透--Kerberos之AS_REQAS_REP
  • [蓝桥杯] 挖矿(CC++双语版)
  • 【RabbitMQ】队列模型
  • C++(进阶) 第11智能指针
  • HTTP的Keep-Alive是什么?TCP 的 Keepalive 和 HTTP 的 Keep-Alive 是一个东西吗?
  • ZW3D二次开发_普通对话框_设置对话框弹出位置
  • 基于webgis画点(未知坐标情况下)
  • FL-00002-MongoDB案例+1-数据救援工作
  • 【C++】函数直接返回bool值和返回bool变量差异
  • 使用 redis 实现消息队列
  • 【leetcode hot 100 70】爬楼梯
  • 万相2.1本地部署教程——阿里开源超强AI视频模型:物理模拟×中英双驱,定义AI生成新标杆!
  • almalinux 8 9 升级到指定版本
  • Ansible的使用2
  • 一周学会Pandas2 Python数据处理与分析-Pandas2二维数据结构-DataFrame
  • ruby超高级语法
  • Jenkins配置的JDK,Maven和Git
  • 一站式AIGC创作平台主要功能介绍及使用教程
  • C语言核心知识点整理:结构体对齐、预处理、文件操作与Makefile
  • GPT文生图模型新玩法
  • DFS和BFS的模版
  • Linux 基础入门操作 前言 VIM的基本操作 2
  • Java logback框架日志输出中文乱码的解决方案(windows)
  • 【Easylive】定时任务-每日数据统计和临时文件清理
  • JavaWeb 课堂笔记 —— 04 Ajax
  • 我提了一个 Androidx IssueTracker