在 echarts 的 rich 中使用 iconfont 图标库图标作为 backgroundColor.image 值的方法

实现步骤

1、引入 iconfont.js。该脚本执行时,会在 body 下插入一个 svg 标签,标签下包含了图标库中的 svg 图标 path。

<script src="your/iconfont/path/iconfont.js"></script>

或者

import 'your/iconfont/path/iconfont.js'

2、获取 svg 的 dom 节点。注意,iconfont 的 svg 是插入到 body 下的。

cosnt svgDom = document.querySelector('body > svg')

3、 获取图标的描边路径,即 path 的 d 属性;以及 symbol 中的 viewBox 属性(注意:如果没有viewBox,最终可能显示的是空白图标)

const icon = 'icon-namexxx' // icon 是图标的名称,也就是iconfont中对应图标的名称
const svgViewBox = svgDom.querySelector(`#${icon}`)?.getAttribute('viewBox')
const svgPath = svgDom.querySelector(`#${item.icon} > path`)?.getAttribute('d')

4、拼接 svg 字符串,可动态设置颜色值 color

const color = '#ffffff'
const svgStr = `<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="${svgViewBox}" ><g><path d="${svgPath}" fill="${color}"/></g></svg>`

5、将svg字符串转换成 blob 流,并赋值给 HTMLImageElement 对象

img.src = URL.createObjectURL(new Blob([svgStr], {type: 'image/svg+xml'}))

6、使用 HTMLImageElement 对象显示图标
在这里插入图片描述

const chartOption = {// ...yAxis: {axisLabel: {rich: {styleName: {backgroundColor: { image: img }}}}}// ...
}

到这里大功告成,完成代码:

cosnt svgDom = document.querySelector('body > svg')const icon = 'icon-namexxx' // icon 是图标的名称,也就是iconfont中对应图标的名称
const svgViewBox = svgDom.querySelector(`#${icon}`)?.getAttribute('viewBox') 
const svgPath = svgDom.querySelector(`#${item.icon} > path`)?.getAttribute('d')const color = '#ffffff'
const svgStr = `<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="${svgViewBox}" ><g><path d="${svgPath}" fill="${color}"/></g></svg>`img = new Image()
img.src = URL.createObjectURL(new Blob([svgStr], {type: 'image/svg+xml'}))const chartOption = {// ...yAxis: {axisLabel: {rich: {styleName: {backgroundColor: { image: img }}}}}// ...
}

问题拓展

有时一个项目中,不止使用一个图标库,因此在body下不止一个svg,仍然用上面的方法可能无法获取到对应图标,因此需要将所有svg都获取下来,然后遍历。

const svgDomList = document.querySelectorAll('body > svg')
let img = null
const icon = 'icon-namexxx'
if(svgDomList && svgDomList.length > 0) {for(let i = 0; i < svgDomList.length; i++) {const svgDom = svgDomList[i]const svgSymbol = svgDom.querySelector(`#${icon}`)if(svgSymbol) {const svgViewBox = svgDom.querySelector(`#${icon}`)?.getAttribute('viewBox')const svgPath = svgDom.querySelector(`#${icon} > path`)?.getAttribute('d')const svgStr = `<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="${svgViewBox}" ><g><path d="${svgPath}" fill="${color}"/></g></svg>`img = new Image()img.src = URL.createObjectURL(new Blob([svgStr], {type: 'image/svg+xml'}))break;}}
}const chartOption = {// ...yAxis: {axisLabel: {rich: {styleName: {backgroundColor: { image: img }}}}}// ...
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/519947.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年最新整理腾讯云学生服务器价格、续费和购买流程

2024年腾讯云学生服务器优惠活动「云校园」&#xff0c;学生服务器优惠价格&#xff1a;轻量应用服务器2核2G学生价30元3个月、58元6个月、112元一年&#xff0c;轻量应用服务器4核8G配置191.1元3个月、352.8元6个月、646.8元一年&#xff0c;CVM云服务器2核4G配置842.4元一年&…

KOA优化最近邻分类预测(matlab代码)

KOA-最近邻分类预测matlab代码 开普勒优化算法&#xff08;Kepler Optimization Algorithm&#xff0c;KOA&#xff09;是一种元启发式算法&#xff0c;灵感来源于开普勒的行星运动规律。该算法模拟行星在不同时间的位置和速度&#xff0c;每个行星代表一个候选解&#xff0c;…

ZYNQ--AXI_DMA使用

文章目录 手册阅读典型连接图SG模式关闭时的寄存器地址SG模式开启时的寄存器地址BD设计PS端设计对于DMA寄存器的控制对DMA进行初始化手册阅读 典型连接图 SG模式关闭时的寄存器地址 SG模式开启时的寄存器地址

慢SQL调优-索引详解面试题

Mysql 慢SQL调优-索引详解面试题 前言一、慢查询日志设置二、explain查看执行计划三、索引失效四、索引操作五、profile 分析执行耗时 前言 最新的 Java 面试题&#xff0c;技术栈涉及 Java 基础、集合、多线程、Mysql、分布式、Spring全家桶、MyBatis、Dubbo、缓存、消息队列…

软件测试工程师,如何工资过万?(我的经验之谈)

对于测试工程师这个岗位而言&#xff0c;月薪过万并不是一件难事&#xff0c;笔者毕业时的第一份工作便拿到了7K的薪资&#xff0c;如今入职两年&#xff0c;薪资也过了万元大关。 我周边有不少想要入行这一行业的小伙伴都对我目前的工作和生活状态好奇&#xff0c;在此写一篇文…

Python+Pytest接口自动化之HTTP协议基础

HTTP协议简介 HTTP 即 HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09;&#xff0c;是互联网上应用最为广泛的一种网络协议。所有的 WWW 文件都必须遵守这个标准。 设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法。HTTP 协议在 OSI 模型…

对于simplex算法的代码实现最优解存在性的证明

对于任何线性规划系统,并不是都存在最优解,如果在约束条件中,每个常量都是大于等于0的,那么线性规划系统肯定是有最优解的,此时将每个变量选取为0就可以了。而只有当约束条件中的常量有小于0的情况的时候,才需要验证系统是否存在最优解,给出一个反例,进行最优解的存在性…

K8S之实现业务的蓝绿部署

如何实现蓝绿部署 什么是蓝绿部署&#xff1f;蓝绿部署的优势和缺点优点缺点 通过k8s实现线上业务的蓝绿部署 什么是蓝绿部署&#xff1f; 部署两套系统&#xff1a;一套是正在提供服务系统&#xff0c;标记为 “绿色” &#xff1b;另一套是准备发布的系统&#xff0c;标记为…

Spring事务注解@Transactional的流程和源码分析

Spring事务简介 Spring事务有两种方式&#xff1a; 编程式事务&#xff1a;编程式事务通常使用编程式事务管理API实现&#xff0c;比如Spring提供的PlatformTransactionManager接口&#xff0c;使用它操控事务。声明式事务&#xff1a;注解式事务使用AOP&#xff08;面向切面…

亚信安慧AntDB:企业数据管理的明日之星

在信息科技飞速发展的时代&#xff0c;亚信科技AntDB团队提出了一项颠覆性的“超融合”理念&#xff0c;旨在满足企业日益增长的复杂混合负载和多样化数据类型的业务需求。这一创新性框架的核心思想在于融合多引擎和多能力&#xff0c;充分发挥分布式数据库引擎的架构优势&…

《操作系统真相还原》读书笔记一:环境搭建 32位centos6.3+bochs

下载32位的centos6.3centos6.3 https://archive.kernel.org/centos-vault/6.3/isos/i386/ 在virtualbox中安装centos6.3 1、系统运维中常用的Linux操作系统是红帽Linux或者CentOS。 从官方网站下载CentOS 6.3镜像光盘。 2、运行虚拟机&#xff0c;在选择界面选择"Inst…

如何将中科方德桌面操作系统加入Windows域

往期文章&#xff1a;自定义SSH客户端连接时的显示信息 | 统信UOS | 麒麟KYLINOS Hello&#xff0c;大家好啊&#xff0c;今天我非常高兴地给大家带来一篇关于如何将中科方德桌面操作系统加入Windows域的教程文章。对于使用中科方德桌面操作系统的用户来说&#xff0c;将其加入…