一键换肤(Echarts 自定义主题)
一键换肤(Echarts 自定义主题)
一、使用官方主题配置工具
官方主题配置工具:https://echarts.apache.org/zh/theme-builder.html

如果以上主题不满足使用,可以自己自定义主题

例如:修改背景、标题等,可按照设计师需求来更改

配置好之后,下载主题


有两种方式可选:JS 版本、JSON 版本,以 JSON 版本为例:
复制到项目中( theme.json ),
theme.json 文件示例:
{"categoryAxis": {"axisLine": {"show": true,"lineStyle": {"color": "green"}},"axisTick": {"show": true,"lineStyle": {"color": "green"}},"axisLabel": {"show": true,"color": "green"} },"valueAxis": {"axisLine": {"show": false,"lineStyle": {"color": "green"}},"axisLabel": {"show": true,"color": "green"}},"legend": {"textStyle": {"color": "green"}}
}
注册主题:
// 引入主题
import theme from './theme.json'// 使用echarts
import echarts from 'echarts'
echarts.registerTheme('customTheme', theme)
使用:
//使用echarts
<div id="test">...
</div>
<script>let myChart = echarts.init(document.getElementById("test"),"customTheme");let option = {...}myChart.setOption(option);
</script>
完整代码:
<template><div id="main" style="width: 600px; height: 400px"></div>
</template><script>
import theme from "./theme.json";
import * as echarts from "echarts";export default {mounted() {//注册主题echarts.registerTheme("customTheme", theme);//初始化使用主题var myChart = echarts.init(document.getElementById("main"), "customTheme"); // 使用dark 、light或无第二参数myChart.setOption({xAxis: {type: "category",data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],},yAxis: {type: "value",},series: [{data: [150, 230, 224, 218, 135, 147, 260],type: "line",},],});},
};
</script>
如果是多主题切换,则可以将各个主题的颜色整合在一个文件,分别注册
{"lightTheme": {"categoryAxis": {"axisLine": {"show": true,"lineStyle": {"color": "#cccccc"}},"axisTick": {"show": true,"lineStyle": {"color": "#cccccc"}},"axisLabel": {"show": true,"color": "#cccccc"}},"valueAxis": {"axisLine": {"show": false,"lineStyle": {"color": "#cccccc"}},"axisLabel": {"show": true,"color": "#cccccc"}},"legend": {"textStyle": {"color": "#cccccc"}}},"darkTheme": {"categoryAxis": {"axisLine": {"show": true,"lineStyle": {"color": "#ffffff"}},"axisTick": {"show": true,"lineStyle": {"color": "#ffffff"}},"axisLabel": {"show": true,"color": "#ffffff"}},"valueAxis": {"axisLine": {"show": false,"lineStyle": {"color": "#ffffff"}},"axisLabel": {"show": true,"color": "#ffffff"}},"legend": {"textStyle": {"color": "#ffffff"}}}
}
这样的话,就可以对应官方示例中的这种(深色/浅色模式)
https://echarts.apache.org/examples/zh/editor.html?c=line-simple

二、上述不满足使用的情况

这是因为执行先后顺序

先使用主题色(初始化),再配置的 option,option 里的颜色覆盖了主题里的颜色。
这种情况下,我这边是用了笨办法,一个个去设置(大家如果有好的办法,可以交流下)
给 x 轴、y轴、图例、标题单独设置了 深色模式下的颜色。
定义 darkTheme.json 文件:
{"title": {"textStyle": {"color": "rgba(255,255,255,0.6)"},"subtextStyle": {"color": "rgba(255,255,255,0.6)"}},"tooltip": {"backgroundColor": "rgba(5,22,38,0.9)","borderColor": "rgba(5,22,38,0.9)","textStyle": {"color": "rgba(255,255,255,0.6)"}},"categoryAxis": {"axisLine": {"lineStyle": {"color": "#CCCCCC"}}, "axisTick": {"lineStyle": {"color": "#CCCCCC"}},"axisLabel": {"color": "rgba(255,255,255,0.6)"}},"valueAxis": {"axisLine": {"lineStyle": {"color": "#CCCCCC"}},"axisLabel": {"color": "rgba(255,255,255,0.6)"},"nameTextStyle": {"color": "rgba(255,255,255,0.6)"},"splitLine": {"lineStyle": {"color": "rgba(5,22,38,0.7)"}}},"legend": {"textStyle": {"color": "rgba(255,255,255,0.8)"}}
}
使用
<script>
import { cloneDeep } from "lodash-es";
import darkTheme from "./darkTheme.json";export default {props: {option: {type: Object,default: null,},},name: "ChartCustomEcharts",data() {return {baseChart: null,};},methods: {setOption(option = this.option) {if (option && this.baseChart) {const result = this.getThemeColors(option);this.baseChart.setOption(result, true);}},initChart() {this.baseChart = echarts.init(this.$refs["baseChart"]);this.setOption();},getThemeColors(data) {const option = cloneDeep(data)const themeType = this.themeType;if (themeType === "dark") {// 标题if (option.title) {if (option.title.subtextStyle) {option.title.subtextStyle.color = darkTheme.title.subtextStyle.color;}}// 图例if (option.legend) {if (option.legend.textStyle) {option.legend.textStyle.color = darkTheme.legend.textStyle.color;} else {option.legend.textStyle = darkTheme.legend.textStyle;}}// x轴if (option.xAxis) {if (Array.isArray(option.xAxis)) {option.xAxis.forEach((work) => {if (work.axisLabel) {work.axisLabel.color = darkTheme.categoryAxis.axisLabel.color;}if (work.axisLine) {if (work.axisLine.lineStyle) {work.axisLine.lineStyle.color = darkTheme.categoryAxis.axisLine.lineStyle.color;} else {work.axisLine.lineStyle = darkTheme.categoryAxis.axisLine.lineStyle;}}});}}// Y轴if (option.yAxis) {if (Array.isArray(option.yAxis)) {option.yAxis.forEach((work) => {if (work.axisLabel) {work.axisLabel.color = darkTheme.valueAxis.axisLabel.color;}if (work.axisLine) {if (work.axisLine.lineStyle) {work.axisLine.lineStyle.color = darkTheme.valueAxis.axisLine.lineStyle.color;} else {work.axisLine.lineStyle = darkTheme.valueAxis.axisLine.lineStyle;}}if(work.splitLine){if(work.splitLine.lineStyle){work.splitLine.lineStyle.color = darkTheme.valueAxis.splitLine.lineStyle.color;}else{work.splitLine.lineStyle = darkTheme.valueAxis.splitLine.lineStyle}}if (work.nameTextStyle) {work.nameTextStyle.color = darkTheme.valueAxis.nameTextStyle.color;}});}}// tooltipif (option.tooltip) {option.tooltip.backgroundColor = darkTheme.tooltip.backgroundColor;option.tooltip.borderColor = darkTheme.tooltip.borderColor;if (option.tooltip.textStyle) {option.tooltip.textStyle.color = darkTheme.tooltip.textStyle.color;} else {option.tooltip.textStyle = darkTheme.tooltip.textStyle;}}}return option;},},
};
</script>
相关文章:
一键换肤(Echarts 自定义主题)
一键换肤(Echarts 自定义主题) 一、使用官方主题配置工具 官方主题配置工具:https://echarts.apache.org/zh/theme-builder.html 如果以上主题不满足使用,可以自己自定义主题 例如:修改背景、标题等,可…...
Unity 6 预览版正式发布
Unity 6 预览版发布啦,正式版本将于今年晚些时候正式发布! 下载链接: https://unity.com/releases/editor/whats-new/6000.0.0 Unity 6 预览版是 Unity 6 开发周期的最后一个版本,在去年 11 月 Unite 大会上,我们宣…...
如何跳过极狐GitLab 密钥推送保护功能?
极狐GitLab 是 GitLab 在中国的发行版,专门面向中国程序员和企业提供企业级一体化 DevOps 平台,用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规,而且所有的操作都是在一个平台上进行,省事省心省钱。可以一键安装极狐GitL…...
Android高版本抓包总结
方案1 CharlesVirtualXposedJustTrustMe 推荐使用三星手机此方案 VirtualXposed下载链接:https://github.com/android-hacker/VirtualXposed/releases JustTrustMe下载链接:https://github.com/Fuzion24/JustTrustMe/releases/ 下载完成后使用adb命令…...
《AI视频类工具之五—— 开拍》
一.简介 官网:开拍 - 用AI制作口播视频用AI制作口播视频https://www.kaipai.com/home?ref=ai-bot.cn 开拍是一款由美图公司在2023年推出,利用AI技术制作的短视频分享应用。这款工具通过AI赋能,为用户提供了从文案创作、视频拍摄到视频剪辑、包装的一站式解决方案,极大地…...
面试经典算法150题系列-最后一个单词的长度
最后一个单词的长度 给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 示例 1: 输入:s "Hello World&qu…...
RTT学习
电源管理组件 嵌入式系统低功耗管理的目的在于满足用户对性能需求的前提下,尽可能降低系统功耗以延长设备待机时间。 高性能与有限的电池能量在嵌入式系统中矛盾最为突出,硬件低功耗设计与软件低功耗管理的联合应用成为了解决矛盾的有效手段。 现在的各…...
前端面试题(二十五)|附赠完整面试流程
📝📝今日分享:前端面试题系列继续更新啦! 🤔🤔面试题是什么呢?这份前端面试题主要是上海某银行的中级前端面试题,面试时长属实没想到,挺短的!但从整个面试流程…...
【分布式系统】关于主流的几款分布式链路追踪工具
Jaeger 标准化与兼容性: Jaeger 支持 OpenTracing 和 OpenTelemetry 标准,这意味着它可以与各种微服务架构和应用框架无缝集成,提供了广泛的兼容性和灵活性。 数据存储选项: Jaeger 支持多种数据存储后端,如 Cassandra…...
【吸引力法则】探究人生欲:追求深度体验与宇宙链接
文章目录 什么是人生欲?唤醒人生欲:克服配得感的三大障碍1 第一大障碍:法执的压制2 第二大障碍:家庭的继承2.1 家庭创伤的代际传递2.2 家庭文化基因的传递2.2.1 “成年人最大的美德是让自己的生活过得更加精彩。”2.2.2 荷欧波诺波…...
REST framework-通用视图[Generic views]
Django’s generic views… were developed as a shortcut for common usage patterns… They take certain common idioms and patterns found in view development and abstract them so that you can quickly write common views of data without having to repeat yourself…...
行驶证OCR识别接口如何用Java调用
一、什么是行驶证OCR识别接口? 传入行驶证照片,行驶证图片上的文字信息,返回包括所有人、品牌型号、住址、车牌号、发动机号码、车辆识别代号、注册日期、发证日期等信息。 行驶证 OCR 接口的主要作用是代替手动输入,提高信息录…...
8月15日笔记
masscan安装使用 首先需要有c编译器环境。查看是否有c编译器环境: gcc -v如果系统中已经安装了 GCC,这个命令将输出 GCC 的版本信息。如果未安装,你会看到类似于 “command not found” 的错误消息。 如果没有下载,使用如下命令…...
CSS3 圆角
CSS3 圆角 引言 在网页设计中,圆角矩形是一种常见的设计元素,它们为页面带来了柔和的视觉体验。随着CSS3的推出,实现圆角矩形变得异常简单,无需依赖图片或复杂的JavaScript代码。本文将详细介绍CSS3中用于创建圆角矩形的border-…...
VUE项目中main.js中不能使用 @引入路径吗
VUE项目中main.js中不能使用 引入路径吗 vite.config已经配置了别名 但是在main.js中直接引入报错 修改成 相对路径后,保存消失 找到原因:vite.config 漏了引入 import { defineConfig } from ‘vite’ import vue from ‘vitejs/plugin-vue’ 导致…...
Spring日志
1.日志的作用 定位和发现问题(主要)系统监控数据采集日志审计...... 2.日志的使用 2.1 ⽇志格式的说明 2.2 打印日志 Spring集成了日志框架,直接使用即可 步骤: 1.定义日志对象 2.使⽤⽇志对象打印⽇志 RestController public class LoggerController {private static Logger…...
年薪30万+,TOP大厂月薪10万+....网络安全工程师凭什么?
时代飞速发展,我们的工作、生活乃至整个社会的运转都越来越依赖于网络。也因此,网络的无处不在带来了前所未有的安全风险。 从个人隐私泄露到企业机密被盗,再到国家关键基础设施遭受攻击,网络安全问题无处不在,威胁着…...
WebView 的常见的安全漏洞:
WebView 可能存在以下一些常见的安全漏洞: 跨站脚本攻击(XSS):恶意脚本可能通过网页注入到 WebView 中,从而获取用户数据或执行其他恶意操作。 跨站请求伪造(CSRF):攻击者可能诱导 …...
【python】Python中subprocess模块的参数解读以及应用实战
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...
opencv-python实战项目十一:背景减除法制作运动行人蒙版
文章目录 一,简介二,背景减除法介绍三,算法实现:四,效果: 一,简介 在智能视频监控、人流量统计和运动检测等领域,背景减除法是一种常用的图像处理技术。本文将带您走进OpenCV的世界…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
