vue-echarts主题切换+选择面板实现

article/2025/9/8 10:25:11

通过实现主题选择面板,更方便的对echarts图表进行主题的切换,并且支持饼状图、折线图、柱状图等多类型echarts图表。

目录

1、实现过程

1.1、导入echarts主题JS文件

1.2、添加选择按钮图片

1.3、添加按钮

1.4、主题选择面板实现

1.5、初始化echarts图

1.6、添加选择事件

2、实现效果

3、实现代码

4、面板所需图片文件


1、实现过程

1.1、导入echarts主题JS文件

实现echarts主题切换需要导入echarts模块的主题JS文件,文件位于echarts/theme/目录下。

import * as echarts from "echarts";
import 'echarts/theme/azul.js'
import 'echarts/theme/bee-inspired.js'
import 'echarts/theme/blue.js'
import 'echarts/theme/caravan.js'
import 'echarts/theme/carp.js'
import 'echarts/theme/cool.js'
import 'echarts/theme/dark.js'
import 'echarts/theme/dark-blue.js'
import 'echarts/theme/dark-bold.js'
import 'echarts/theme/dark-digerati.js'
import 'echarts/theme/dark-fresh-cut.js'
import 'echarts/theme/dark-mushroom.js'
import 'echarts/theme/eduardo.js'
import 'echarts/theme/forest.js'
import 'echarts/theme/fresh-cut.js'
import 'echarts/theme/fruit.js'
import 'echarts/theme/gray.js'
import 'echarts/theme/green.js'
import 'echarts/theme/helianthus.js'
import 'echarts/theme/infographic.js'
import 'echarts/theme/inspired.js'
import 'echarts/theme/jazz.js'
import 'echarts/theme/london.js'
import 'echarts/theme/macarons.js'
import 'echarts/theme/macarons2.js'
import 'echarts/theme/mint.js'
import 'echarts/theme/red.js'
import 'echarts/theme/red-velvet.js'
import 'echarts/theme/roma.js'
import 'echarts/theme/royal.js'
import 'echarts/theme/sakura.js'
import 'echarts/theme/shine.js'
import 'echarts/theme/tech-blue.js'
import 'echarts/theme/vintage.js'

1.2、添加选择按钮图片

图片文件已放到文章末尾,下载之后,将文件夹添加到/src/assets/目录下即可,

与代码相对应

:src="require(`@/assets/right_angle_picture/`+btn+`.png`)"

1.3、添加按钮

添加按钮控制面板显示,点击按钮将弹出主题选择面板

<el-button type="info" plain @click="dialogVisible = true">切换主题</el-button>

1.4、主题选择面板实现

使用el-dialog 显示面板,添加el-scrollbar 滚动条展示选择按钮,v-for循环添加按钮和图片

<el-dialogtitle="Echarts主题选择":visible.sync="dialogVisible"width="500px"class="class_dialog_hospital"center><div class="cab"><el-scrollbar style="height: 100%"><el-row align="middle"v-for="(btnArr, index) in oprBtn":key="index"><el-col :span="12"style="padding-top:5px;padding-bottom:5px"v-for="(btn, index) in btnArr":key="index"><div><div><el-button plain round @click="handleToggle(btn)"><img style="width: 151px; height: 19px":src="require(`@/assets/right_angle_picture/`+btn+`.png`)" alt=""/></el-button></div></div></el-col></el-row></el-scrollbar></div></el-dialog>

1.5、初始化echarts图

指定主题名。在ECharts对象初始化时,通过init的第2个参数指定需要引入的主题名。如statisticsChart = echarts.init(this.$refs.statisticsChart, 主题名); 。

  mounted() {statisticsChart = echarts.init(this.$refs.statisticsChart, 'light',{renderer:'svg'}); //svg格式显示图表statisticsChart.setOption(this.options);},

1.6、添加选择事件

点击主题选择按钮之后,将主题名称传入方法中,改变主题先将echarts头像销毁,并重新构建echarts,点击之后隐藏主题选择面板,这里构建echarts时选择SVG 渲染器,

    handleToggle(theme) {statisticsChart.dispose(); //销毁echartsstatisticsChart = echarts.init(this.$refs.statisticsChart, theme,{renderer:'svg'});  //svg格式显示图表statisticsChart.setOption(this.options);this.dialogVisible = false;},

2、实现效果

ee2aad9eb56742189ccd96f8a682d3fd.png

 7b2eae739b7546cebbccb31cda6dd02c.png

 7faa545ae08f43e8895a3da037f77735.png

3、实现代码

<template><div class="app-container"><el-button type="info" plain @click="dialogVisible = true">切换主题</el-button><div ref="statisticsChart" class="statistics"></div><el-dialogtitle="Echarts主题选择":visible.sync="dialogVisible"width="500px"class="class_dialog_hospital"center><div class="cab"><el-scrollbar style="height: 100%"><el-row align="middle"v-for="(btnArr, index) in oprBtn":key="index"><el-col :span="12"style="padding-top:5px;padding-bottom:5px"v-for="(btn, index) in btnArr":key="index"><div><div><el-button plain round @click="handleToggle(btn)"><img style="width: 151px; height: 19px":src="require(`@/assets/right_angle_picture/`+btn+`.png`)" alt=""/></el-button></div></div></el-col></el-row></el-scrollbar></div></el-dialog></div>
</template><script>import * as echarts from "echarts";import 'echarts/theme/azul.js'
import 'echarts/theme/bee-inspired.js'
import 'echarts/theme/blue.js'
import 'echarts/theme/caravan.js'
import 'echarts/theme/carp.js'
import 'echarts/theme/cool.js'
import 'echarts/theme/dark.js'
import 'echarts/theme/dark-blue.js'
import 'echarts/theme/dark-bold.js'
import 'echarts/theme/dark-digerati.js'
import 'echarts/theme/dark-fresh-cut.js'
import 'echarts/theme/dark-mushroom.js'
import 'echarts/theme/eduardo.js'
import 'echarts/theme/forest.js'
import 'echarts/theme/fresh-cut.js'
import 'echarts/theme/fruit.js'
import 'echarts/theme/gray.js'
import 'echarts/theme/green.js'
import 'echarts/theme/helianthus.js'
import 'echarts/theme/infographic.js'
import 'echarts/theme/inspired.js'
import 'echarts/theme/jazz.js'
import 'echarts/theme/london.js'
import 'echarts/theme/macarons.js'
import 'echarts/theme/macarons2.js'
import 'echarts/theme/mint.js'
import 'echarts/theme/red.js'
import 'echarts/theme/red-velvet.js'
import 'echarts/theme/roma.js'
import 'echarts/theme/royal.js'
import 'echarts/theme/sakura.js'
import 'echarts/theme/shine.js'
import 'echarts/theme/tech-blue.js'
import 'echarts/theme/vintage.js'let statisticsChart = null;
export default {name: "index",data() {return {//主题选择面板显示标识dialogVisible: false,}},mounted() {statisticsChart = echarts.init(this.$refs.statisticsChart, 'light',{renderer:'svg'}); //svg格式显示图表statisticsChart.setOption(this.options);},computed: {options() {return {legend: {},tooltip: {},dataset: {source: [['product', '2015', '2016', '2017'],['Matcha Latte', 43.3, 85.8, 93.7],['Milk Tea', 83.1, 73.4, 55.1],['Cheese Cocoa', 86.4, 65.2, 82.5],['Walnut Brownie', 72.4, 53.9, 39.1]]},xAxis: { type: 'category' },yAxis: {},series: [{ type: 'bar' }, { type: 'bar' }, { type: 'bar' }]};},//主题选择面板按钮oprBtn(){let index = 0;let arrTmp = [];let displayBtn = ['azul', 'bee-inspired', 'blue', 'caravan','carp', 'cool', 'dark', 'dark-blue','dark-bold', 'dark-digerati', 'dark-fresh-cut', 'dark-mushroom','eduardo', 'forest', 'fresh-cut', 'fruit','gray', 'green', 'helianthus', 'infographic', 'inspired','jazz', 'london', 'macarons', 'macarons2','mint', 'red', 'red-velvet', 'roma','royal', 'sakura', 'shine', 'tech-blue', 'vintage'];for (let i = 0; i < displayBtn.length; i++) {index = parseInt(i / 4);if (arrTmp.length <= index) {arrTmp.push([]);}arrTmp[index].push(displayBtn[i])}return arrTmp;}},methods: {handleToggle(theme) {statisticsChart.dispose(); //销毁echartsstatisticsChart = echarts.init(this.$refs.statisticsChart, theme,{renderer:'svg'});  //svg格式显示图表statisticsChart.setOption(this.options);this.dialogVisible = false;},}
}
</script><style scoped>.statistics {width: 960px;height: 550px;background-color: #ffffff;padding: 20px;border-radius: 20px;
}.cab {padding-left: 40px;padding-right: 10px;height: 480px;
}/*头区样式*/
/deep/ .class_dialog_hospital .el-dialog__header {background: #F0FFF0;padding: 4px 0 4px 10px;border-top-left-radius: 9px;border-top-right-radius: 9px;height: 45px;line-height: 45px;font-family: "PingFang SC";
}/*头区退出按钮样式*/
/deep/ .class_dialog_hospital .el-dialog__headerbtn {top: 10px;right: 10px;font-size: 15px;
}/*样式穿透*//*对话框区*/
/deep/ .class_dialog_hospital .el-dialog {border: 1px solid #DCDFE6;box-shadow: 0 0 4px #e6e6e6;border-radius: 10px;padding: 0;
}/*内容区*/
/deep/ .class_dialog_hospital .el-dialog__body {padding: 10px 0px 10px 0px;
}/deep/ .cab .is-horizontal {display: none;
}/deep/ .cab .el-scrollbar__wrap {overflow-x: hidden;
}</style>

4、面板所需图片文件

图片文件


http://chatgpt.dhexx.cn/article/9a5PCG8K.shtml

相关文章

echarts 2.0 macarons主题安装

2019独角兽企业重金招聘Python工程师标准>>> 主题下载: http://echarts.baidu.com/doc/example/theme/macarons.js 其他主题改名字就好了.[无责任猜测] 这里采用AMD加载方式 [博主用的是requirejs] 在main.js中 require.config({paths:{echarts:js/echarts/echarts…

魔法值及魔法值处理方法

魔法值 什么是魔法值 所谓的魔法值就是在代码中直接出现的数字。   PS&#xff1a;代码中有魔法值会造成代码可读性低&#xff08;与代码量成正比&#xff09;。还会造成维护困难&#xff0c;改动一个数值便要大动干戈&#xff0c;牵一发而动全身。应当尽力消灭或减少魔法值…

别让【魔法值】毁了你的代码!

二分钟&#xff0c;教你一个写代码的好习惯。 大家好&#xff0c;我是鱼皮&#xff0c;今天通过一件事情&#xff0c;分享写代码时的一个重要小技巧。 前段时间&#xff0c;我在编程导航项目中开源了一段代码&#xff0c;实现的功能是&#xff0c;当用户的操作失败时&#xff…

【java】万恶的魔法值

在最近的小云通知项目中&#xff0c;我负责维护后端的开发&#xff0c;也是深刻体会到用魔法值会给维护人员带来多大的痛苦&#xff01;可谓一个bug改一天…… 文章目录 什么是魔法值怎么处理魔法值 什么是魔法值 首先我们说一下什么是魔法值&#xff0c;所谓魔法值&#xff0…

什么是java中的魔法值

自从在idea上用了 《阿里巴巴Java开发手册》的插件之后 这里附上对应的插件安装方法&#xff1a;https://developer.aliyun.com/article/224817 偶然发现自己的代码中出现了所谓的 “魔法值” 什么是魔法值呢 所谓魔法值&#xff0c;就是在代码中直接出现的数值&#xff0c;只…

Java中的魔法值和解决方法

目录 一、什么是魔法值 二、解决方法 一、什么是魔法值 魔法数值、魔法数字、魔法值&#xff0c;这是一个东西&#xff0c;不同的叫法。 所谓魔法值&#xff0c;是指在代码中直接出现的数值&#xff0c;只有在这个数值记述的那部分代码中才能明确了解其含义&#xff0c;数字…

java 不要使用魔法值_为什么阿里巴巴Java开发手册中不允许魔法值出现在代码中?...

武培轩 推荐搜索 JavaSpring Boot数据结构MySQLElasticsearchNginx 在阅读《阿里巴巴Java开发手册》时&#xff0c;发现有一条关于关于常量定义的规约&#xff0c;具体内容如下&#xff1a; 图中的反例是将数据缓存起来&#xff0c;并使用魔法值加链路 id 组成 key&#xff0c;…

java 项目减少魔法值_项目代码中魔法值的优雅处理

经常在代码里面会用一些表示有意义的数字&#xff0c;但是如果不写注释的话&#xff0c;过了一段时间我们自己再回去优化代码的时候&#xff0c;可能自己也不清楚这些数字表示的是什么意思了。 如果写注释的话&#xff0c;就要每次使用数字的时候都要写注释了&#xff0c;这样的…

java 魔法值_Java 开发技巧:减少魔法值的使用

1. 前言 重构老代码中遇到了类似这种写法&#xff1a; public void attend(String value){ if ("0".equals(value)) { //todo } else if ("1".equals(value)) { //todo } else { //todo } } 脑壳疼&#xff01;从 Java 语法上无懈可击&#xff0c;但是从业…

IDEA快速去除魔法值

背景 写代码有的时候为了方便&#xff0c;会在代码里面留下很多字符串之类的变量。这种便便会被定义为魔法值。 这种变量正常来讲不影响阅读的。所以一般情况下&#xff0c;我们都不会去处理它。 但是当项目越来越大的时候&#xff0c;我们发现很多地方都有可能使用了同一个…

魔法值与解决办法

1.什么是魔法值 魔法值是指代码中突然出现的数字&#xff0c;之所以称为魔法值&#xff0c;是因为这个20可以有多种意义。在新来的员工接手你的代码时&#xff0c;他们产生疑问&#xff1a;为什么要设这个20&#xff0c;背后有什么秘密吗。大大降低了代码的可维护性。 2.解决办…

java怎么字符连接换行_Java中的换行、转义字符和连接字符-Go语言中文社区

语句输出的换行 我们之前完成了我们的第一个Java输出语句&#xff0c;接下来我们可以做一个简单的输出换行与不换行操作。 例如&#xff1a;我们输出天王盖地虎和宝塔镇河妖 public class Demo1 { public static void main(String[] args) { System.out.println("天王盖地…

java csv 换行_javacsv如何换行输入

javacsv如何换行输入 [2021-02-10 01:25:25] 简介: php去除nbsp的方法:首先创建一个PHP代码示例文件;然后通过“preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/", " ", strip_tags($val));”方法去除所有nbsp即可。推荐:《PHP视频教 java怎么输入换行…

java输出流怎样换行_Java中输出流续写和换行写方法,需要用到的构造方法的知识点...

/* FileOutputStream​(String name, boolean append) 创建文件输出流以指定的名称写入文件。 FileOutputStream​(File file, boolean append) 创建文件输出流以写入由指定的 File对象表示的文件。 创建指定File对象表示的文件中写入数据的文件输出流 构造方法的参数: String …

Java输入换行结束

问题出现 &#xff1a; 我在写一个程序的时候&#xff0c;会发现当我想要用while()循环得到一组数字的时候&#xff0c;不加控制条件while()循环就不会停止。 Scanner scanner1 new Scanner(System.in);while(scanner1.hasNext()){System.out.println(scanner1.nextInt());} …

java中的换行

纯copy的 \r return 到当前行的最左边 \n newline 向下移动一行&#xff0c;并不移动左右。 \r\n &#xff08;"\r"&#xff0c;"\n"和"\r\n"&#xff09;&#xff0c;导致输出结果可能出现错误或不一致。建议在代码中统一使用一个…

Java中换行输出的两种方法

效果&#xff1a; 方法一&#xff1a; public class ChairMan{public static void main(String[] args){System.out.printlin("姓名&#xff1a;法外狂徒");System.out.printlin("性别&#xff1a;男");System.out.printlin("家庭住址&#xff1a;北…

Java换行输出的5种方式

///可以在格式化输出类型%n来指定输出一行&#xff0c;其效果等同于println ///println()相当于printf( )&#xff0c;即另起一行输出对应的参数后&#xff0c;再进行一次换行

java常识-java怎么换行

文章目录 "\r"和"\n"的区别"\r"和"\n"的由来回车键和输入的"\n"有不同吗? 系统影响java使用换行符的几种方式 “\r"和”\n"的区别 回车 \r 本义是光标重新回到本行开头&#xff0c;r的英文return&#xff0c;控…

使用一片74LS74实现四分频

1.问题 要求使用一片74LS74搭建四分频电路。 2.74LS74介绍 74LS74是一个集成2个D触发器&#xff0c;可以用作寄存器、移位寄存器&#xff0c;分频计数器等。 分频原理 把 U1 的 ~Q1 输出端接到 D1 输入端&#xff0c; 需要分频的信号输入 时钟信号输入端 CLK1&#xff0c;这…