Vue2通过点击渲染循环的echarts

news2024/11/27 21:52:57

在这里插入图片描述
底下放置源码cv即可食用
几个注意事项:

  1. echartsData 这个变量是为了模拟后端数据格式
  2. changeTag() 这个方法是为了控制最多可以多选几条
  3. 最后关于循环echarts的灵感来源于 明天也要努力
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <script src="https://cdn.bootcss.com/echarts/4.2.1-rc1/echarts.min.js"></script>
  </head>
  <style>
    * {
      padding: 0;
      margin: 0;
      box-sizing: border-box;
    }
    .container {
      width: 1000px;
      margin: 0 auto;
      background-color: #fff;
      padding-top: 20px;
      height: 100%;
    }

    .typeBox {
      display: flex;
      flex-wrap: wrap;
    }
    .type_list {
      width: calc((100% - 60px) / 2);
      height: 105px;
      background: #ffffff;
      box-shadow: 0px 2px 6px 0px rgba(0, 0, 0, 0.1);
      border-radius: 8px 8px 8px 8px;
      border: 2px solid transparent;
      margin-bottom: 20px;
      margin-right: 20px;
      padding-left: 18px;
      display: flex;
      align-items: center;
      &:nth-child(2n) {
        margin-right: 0;
      }
    }
    .type_list_active {
      border: 2px solid #0fa3ff;
    }
    .w-base {
      width: 70px;
      text-align: justify;
      text-align-last: justify;
    }

    .echarts_box {
      width: 100%;
      height: 100%;
      display: flex;
      justify-content: space-between;
      flex-wrap: wrap;
      margin-top: 40px;
    }
    .line {
      width: calc(50%);
      height: 400px;
    }
  </style>
  <body>
    <div id="app">
      <div class="container">
        <div class="typeBox">
          <div
            class="type_list"
            :class="{'type_list_active': item.sel}"
            v-for="(item,i) in typeList"
            :key="i"
            @click="changeTag(item)"
          >
            <div class="w-base">{{item.title}}</div>
            <div style="flex: 1; text-align: center" class="title">
              {{item.num}}
            </div>
          </div>
        </div>

        <!-- 折线图 -->
        <div class="echarts_box">
          <div class="line" v-for="i in tagData"></div>
        </div>
      </div>
    </div>

    <script>
      new Vue({
        el: "#app",
        data() {
          return {
            typeList: [],
            tagData: [], // 选中的
            echartsData: {}, // 数据源
          };
        },
        created() {
          this.typeList = [
            {
              title: "鲁迪乌斯",
              num: 87,
              sel: false,
            },
            {
              title: "艾丽斯",
              num: 100,
              sel: false,
            },
            {
              title: "希露菲",
              num: 96,
              sel: false,
            },
            {
              title: "洛琪希",
              num: 98,
              sel: false,
            },
          ];
          this.echartsData = {
            date_data: ["2023-07-01", "2023-07-06"],
            艾丽斯: [60, 100],
            鲁迪乌斯: [70, 95],
            希露菲: [50, 97],
            洛琪希: [80, 100],
          };
        },

        mounted() {
          // 这边做个默认显示
          this.tagData = ["艾丽斯", "洛琪希"];

          this.typeList.forEach((v) => {
            v.sel = this.tagData.includes(v.title);
          });

          this.init(this.echartsData);
        },
        methods: {
          changeTag(item) {
            if (this.tagData.length == 2 && !item.sel) return;
            if (this.tagData.length < 2 && !item.sel) {
              item.sel = !item.sel;
              this.tagData.push(item.title);
            } else {
              item.sel = false;
              this.tagData = this.tagData.filter((v) => v != item.title);
            }
            this.init(this.echartsData);
          },

          init(data) {
            let lineData = this.tagData.map((v) => data[v]);
            let rgba = ["240, 20, 47", "15, 163, 255"];

            let color = ["#F0142F", "#0FA3FF"];

            this.$nextTick(() => {
              let lineChart = document.getElementsByClassName("line");

              for (var i = 0; i < lineChart.length; i++) {
                // 通过for循环,在相同class的dom内绘制元素
                let myChart = echarts.init(lineChart[i]);
                myChart.clear();
                myChart.setOption({
                  color: color[i],
                  // 整个x y轴的内容
                  grid: {
                    top: "15%",
                    left: "8%",
                    right: "5%",
                    bottom: "10%",
                  },
                  tooltip: {
                    trigger: "axis",
                    formatter: (params) => {
                      let html = "";
                      let unit;
                      params.forEach((element, index) => {
                        if (element.seriesName == "鲁迪乌斯") {
                          unit = "人";
                        } else {
                          unit = "❤";
                        }
                        html += `<div style="display:flex;align-items:center">
                          ${element.marker} <div>${element.seriesName}</div>:${element.data} ${unit}
                      </div>`;
                      });
                      return html;
                    },
                  },
                  xAxis: {
                    type: "category",
                    data: data.date_data,
                    axisTick: {
                      //不显示坐标轴刻度线
                      show: false,
                    },
                    axisLine: {
                      lineStyle: {
                        type: "solid",
                        color: "#dbdce6", //左边线的颜色
                        width: "1", //坐标线的宽度
                      },
                    },
                    axisLabel: {
                      showMaxLabel: true, // 展示最大值
                      showMinLabel: true, // 展示最小值
                      interval: 6,
                      textStyle: {
                        color: "#000", //坐标值得具体的颜色
                      },
                    },
                  },
                  yAxis: {
                    type: "value",
                    name: this.tagData[i],
                    nameTextStyle: {
                      align: "left",
                      fontSize: 16,
                      fontWeight: "bolder",
                      color: "#000000",
                    },
                    splitLine: {
                      show: true,
                      lineStyle: {
                        type: "dashed",
                      },
                    },
                    axisLine: {
                      //不显示坐标轴线
                      show: false,
                    },
                    axisTick: {
                      //不显示坐标轴刻度线
                      show: false,
                    },
                  },
                  series: [
                    {
                      name: this.tagData[i],
                      data: lineData[i],
                      type: "line",
                      smooth: true,
                      symbol: "none",
                      itemStyle: {
                        normal: {
                          lineStyle: {
                            color: color[i], //改变折线颜色
                          },
                        },
                      },
                      //  渐变色
                      areaStyle: {
                        color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
                          {
                            offset: 0,
                            color: `rgba(${rgba[i]}, 0.5)`,
                          },
                          {
                            offset: 1,
                            color: `rgba(${rgba[i]}, 0.1)`,
                          },
                        ]),
                      },
                    },
                  ],
                });
              }
            });
          },
        },
      });
    </script>
  </body>
</html>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

上海亚商投顾:沪指缩量调整 PCB、CPO概念股全天领涨

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 沪指今日震荡调整&#xff0c;创业板指午后跌超1%。AI概念股反弹&#xff0c;存储芯片、CPO等方向领涨&#xff0c…

【MySQL】MySQL基本语句大全

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️MySQL】 文章目录 前言结构化查询语句分类MySQL语句大全&#x1f4da;DDL&#xff08;对数据库和表的操作&#xff09;&#x1f916;DQL&#xff08;查询语句&#xff09;&#x1f4bb;关键字&#x…

香橙派4和树莓派4B构建K8S集群实践之七: Jenkins

目录 1. 说明 2. 步骤 2.1 准备工作 2.2 安装 2.2.1 用jenkins原站for k8s的安装仓方法安装 2.2.2 Helm 安装 3. 相关命令 4. 遇到的问题 5. 参考 1. 说明 在k8s上部署jenkins&#xff0c;并用 jenkins.k8s-t2.com访问在namespace为devops下安装在指定节点k8s-master-…

CAN总线和DCB文件格式

目录 CAN总线和DBC格式1. CAN总线1.1 CAN总线的组织结构1.2 CAN的信号结构 2. DBC格式2.1 通用描述2.2 DBC文件的结构 3. DBC文件官方示例3. DBC文件官方示例 CAN总线和DBC格式 1. CAN总线 控制器局域网总线&#xff08;CAN&#xff0c;Controller Area Network&#xff09;一…

【避坑指南】Unity3D接入外网SDK笔记(GooglePlay/FaceBook/AppsFlyer)

这段时间折腾了一下获取归因数据相关的SDK&#xff0c;遇到非常多奇奇怪挂的报错&#xff0c;在此记录一下。 准备资源 Unity的Jar包解析器&#xff0c;下面提及的SDK都需要工具解析并下载依赖 https://github.com/googlesamples/unity-jar-resolverAndroidStudio&#xff0c…

微信小程序基础库的介绍与更改

一、什么是基础库&#xff1f; 1、基础库是小程序运行的必要环境&#xff0c;我们的开发主要就是面向基础库开发的。基础库封装了微信和手机的能力并提供给小程序使用&#xff0c;我们使用基础库提供的组件和API开发起来非常的方便。 2、基础库存在于我们的微信客户端中&…

骑行,怎么样才能安全的下坡?

大家好&#xff0c;今天我们来聊聊自行车运动中的一个重要话题&#xff1a;如何安全地骑行下坡&#xff1f; 首先&#xff0c;我们要明白&#xff0c;安全下坡的秘诀在于控制。一是速度的控制&#xff0c;二是自身姿势的控制。就像一只灵活的狐狸&#xff0c;既要控制好自己的速…

Excel表格套用格式后分类汇总用不了解决方法之一

表格套用格式选择表格后分类汇总显示灰色不可用&#xff0c;如下图&#xff1a; 解决方法之一&#xff1a;右键-表格-转为区域&#xff0c;确定

如何部署LVS负载均衡集群(NAT模式)

目录 一、集群 负载均衡集群&#xff08;Load Balance Cluster&#xff09; 高可用集群&#xff08;High Availability Cluster&#xff09; 高性能运算集群&#xff08;High Performance Computer Cluster&#xff09; 二、负载均衡工作模式 VIP地址特性&#xff08;虚拟…

剑指offer(C++)-JZ40:最小的K个数(算法-排序)

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 题目描述&#xff1a; 给定一个长度为 n 的可能有重复值的数组&#xff0c;找出其中不去重的最小的 k 个数。例如数组元素是4,5,…

1.1 熟悉x64dbg调试器

x64dbg 是一款开源、免费、功能强大的动态反汇编调试器&#xff0c;它能够在Windows平台上进行应用程序的反汇编、调试和分析工作。与传统的调试器如Ollydbg相比&#xff0c;x64dbg调试器的出现填补了Ollydbg等传统调试器的不足&#xff0c;为反汇编调试工作提供了更高效、更可…

Python 中的 JSON 操作:简单、高效的数据交换格式

目录 1. JSON 数据格式 2. Python 操作 JSON 文件 2.1 JSON 反序列化为 Python 对象 2.2 Python 序列化为 JSON 3 工作中的常见场景 3.1 网络请求和响应 服务器端&#xff08;Python&#xff09;&#xff1a; 客户端&#xff08;JavaScript&#xff09;&#xff1a; 3…

5G三防平板电脑有哪些功能与特点

随着科技的不断进步&#xff0c;平板电脑已经成为许多人生活中必不可少的设备之一。而随着5G技术的全面普及&#xff0c;5G三防平板电脑也应运而生。这些平板电脑集成了内置高通八核处理器搭配Adreno GPU&#xff0c;搭载全新Android 11操作系统&#xff0c;以及提供多应用切换…

docker-compose实现微服务jar+mysql的容器服务发布(经典版)

一 安装mysql服务 1.1 拉取镜像 1.拉取&#xff1a; docker pull mysql:5.7.29 2.查看镜像&#xff1a; docker images 1.2 在宿主机创建文件存储mysql 1.创建映射目录&#xff1a;mysql-c5 在/root/export/dockertest 目录下&#xff0c;mkdir -p mysql-c5 &#…

Django proxy_view代理后端

某些需求下&#xff0c;需要通过Django代理后端&#xff0c;比如开发celery定时任务时候&#xff0c;需要代理后端的flower&#xff0c;代理后端可以直接使用Django自带的授权&#xff0c;方便权限控制 具体操作如下 1.安装 django-proxy 包&#xff0c;进行代理 pip install …

LVS负载均衡集群(DR)

目录 1.数据包流向 2.通信遇到的问题 1.ARP广播 导致所有节点服务器和调度器的VIP响应 2.VIP的调度器失效 3.案例 1. 配置负载调度器 2.部署共享存储 3. 配置节点服务器(这里是两台) 1.数据包流向 1.客户端发送请求到负载均衡器 请求的数据报文到达内核空间 2.负载均…

改进 Elastic Stack 中的信息检索:引入 Elastic Learned Sparse Encoder,我们的新检索模型

作者&#xff1a;Thomas Veasey&#xff0c;Quentin Herreros 在本博客中&#xff0c;我们讨论了我们一直在使用预先训练的语言模型增强 Elastic 开箱即用检索功能所做的工作。 在本系列的上一篇博客文章中&#xff0c;我们讨论了在零样本设置中应用密集模型进行检索的一些挑战…

全网最细,接口自动化测试hook机制使用详细,进阶高级...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 requests 库只支持…

Sa-Token,一款更加轻量的权限认证框架

今天给大家介绍一个轻量级 Java 权限认证框架&#xff0c;我们之前一直采用最多的鉴权框架是OAuth2.0或者SpringSecurity&#xff0c;但是两者的配置都相当复杂&#xff0c;学习成本也非常高&#xff0c;所以我一直在试图寻找更好的解决办法&#xff0c;这几天在搭建权限体系平…

密码学学习笔记(五):Hash Functions - 哈希函数1

简介 什么是密码学中的哈希函数&#xff1f; 哈希函数是一种快速算法&#xff0c;它接受任何长度的输入&#xff0c;并产生一个固定长度的随机输出&#xff0c;称为摘要(digest)&#xff0c;比如&#xff1a; MD4, MD5: 128-bit output (broken) •SHA-1: 160-bit output (b…