echerts饼图分割操作

在饼图制作中遇到了一个难点就是饼图中间是分散的   试了很多方法,最后选择了给每个值中间再加一节的处理方式,并把颜色设置为透明就能达到相同效果。

处理后的样式:

代码:

      let list = this.data.list;/饼图内部展示数据
      // let _this = this;//存储当前this
      let total = Math.max(...list.map(item => item.value));
      let gap = total * (12 / 360);//通过计算得出间隔值
      this.myChart1 = echarts.init(this.$refs["chart-pie"]);
      let data = [];
      for (var i = 0; i < list.length; i++) {
        data.push(
          {
            value: list[i].value,
            name: list[i].name,
            itemStyle: {
              normal: {
                borderColor: this.color[i],
                color: this.color[i]
              }
            }
          },
          {
            value: gap,//间隔值
            name: "",
            itemStyle: {
              normal: {
                label: {
                  show: false
                },
                labelLine: {
                  show: false
                },
                color: "rgba(0, 0, 0, 0)",
                borderColor: "rgba(0, 0, 0, 0)",//间隔颜色设置为透明
                borderWidth: 0
              }
            },
            emphasis: {
              label: {
                show: false
              }
            }
          }
        );
      }

完整代码:

<template>
  <!-- 柱状图 -->
  <div class="ticket public-row">
    <div class="echarts-left fl">
      <div class="mychart" :class="{ 'fix-position': data.list.length > 5 }" :id="chartId" ref="chart-pie"></div>
    </div>
    <div class="text-right fl">
      <div
        class="text-right-item c-p"
        :class="{ acitve: active === index }"
        @click="changeText(index)"
        v-for="(item, index) in data.list"
        :key="index"
      >
        <div class="text-color fl" :class="'color' + index"></div>
        <div class="text-right-item-title fl">{{ item.name }}</div>
        <div class="text-right-item-num fl">{{ item.value }}</div>
        <div class="text-border fl"></div>
        <div class="text-right-item-type">{{ item.mixins }}</div>
      </div>
    </div>
  </div>
  <!-- <p v-else class="m-t20 m-l20">暂无数据</p> -->
</template>

<script>
let dashedPic = require("./img/huanxingtu.png");
export default {
  name: "base-pie",
  components: {},
  props: {
    chartId: {
      type: String,
      default: "chartId2"
    },
    data: {
      type: Object,
      default() {
        return {
          data: [
            { name: "OTA", value: 3124, mixins: "28%" },
            { name: "窗口", value: 3124, mixins: "28%" },
            { name: "小程序", value: 3124, mixins: "28%" },
            { name: "旅行社", value: 3124, mixins: "28%" }
          ],
          number: 9000,
          name: "总票数",
          unit: "张"
        };
      }
    },
    color: {
      type: Array,
      default() {
        return [
          "rgba(47, 107, 255, 1)",
          "rgba(34, 220, 213, 1)",
          "#FC8452",
          "#9A60B4",
          "#73C0DE",
          "#3CA272",
          "#ea7ccc"
        ];
      }
    },

    //显示样式
    typeId: {
      type: Number,
      default: 0
    }
  },
  data() {
    return {
      myChart1: "",
      active: 0
    };
  },
  created() {},
  mounted() {
    this.$nextTick(() => {
      // setTimeout(() => {
      // debugger;
      this.init();
      // }, 500);
    });
  },
  watch: {
    data: {
      handler() {
        this.$nextTick(() => {
          this.init();
        });
      },
      deep: true
    }
  },
  beforeDestroy() {},
  computed: {},
  methods: {
    /**
     * @description:选中切换
     * @param {*} item
     * @Description:
     * @return {*}
     */

    changeText(item) {
      this.active = item;
    },
    /**
     * @description:init 初始化
     * @param {*} item
     * @Description:
     * @return {*}
     */
    init() {
      if (this.myChart1) this.myChart1.dispose();
      if (!this.data) return false;
      let list = this.data.list;
      console.log(list);
      // let _this = this;
      let total = Math.max(...list.map(item => item.value));
      let gap = total * (12 / 360);
      this.myChart1 = echarts.init(this.$refs["chart-pie"]);
      let data = [];
      for (var i = 0; i < list.length; i++) {
        data.push(
          {
            value: list[i].value,
            name: list[i].name,
            itemStyle: {
              normal: {
                borderColor: this.color[i],
                color: this.color[i]
              }
            }
          },
          {
            value: gap,
            name: "",
            itemStyle: {
              normal: {
                label: {
                  show: false
                },
                labelLine: {
                  show: false
                },
                color: "rgba(0, 0, 0, 0)",
                borderColor: "rgba(0, 0, 0, 0)",
                borderWidth: 0
              }
            },
            emphasis: {
              label: {
                show: false
              }
            }
          }
        );
      }

      let option = {
        backgroundColor: "",
        title: [
          {
            text: this.data.number,
            top: "35%",
            left: "center",
            textStyle: {
              fontSize: 26,
              fontFamily: "DIN",
              color: "#ffffff"
            },
            subtext: this.data.name,
            // subtext: "总票数",
            subtextStyle: {
              fontSize: 14,
              color: "rgba(223, 245, 252, 1)"
            }
          },
          {
            text: this.data.unit,
            top: "38%",
            textAlign: "center",
            left: "74%",
            textStyle: {
              color: "rgba(255, 255, 255, 1)",
              fontSize: 18,
              fontWeight: "400"
            }
          }
        ],
        tooltip: {
          trigger: "axis",
          backgroundColor: "rgba(9, 30, 60, 0.6)",
          extraCssText: "box-shadow: 0 0 8px rgba(0, 128, 255, 0.27) inset;",
          borderWidth: 0,
          confine: false,
          appendToBody: true,
          textStyle: {
            color: "#fff",
            fontSize: 10
          }
        },
        legend: null,
        // 可动态生成颜色集合
        // color: this.color,
        series: [
          {
            name: "项目规模占比",
            type: "pie",
            radius: ["80%", "98%"],
            label: {
              show: false
            },
            data: data
          }
        ],
        graphic: {
          elements: [
            {
              itemStyle: {
                opacity: 0.8 // 设置整个系列的数据点的透明度
              },
              type: "image",
              style: {
                image: dashedPic,
                width: 154,
                height: 154,
                opacity: 0.6
              },
              left: "center",
              top: "center"
            }
          ]
        }
      };

      this.myChart1.setOption(option);
    }
  }
};
</script>

<style lang="less" scoped>
.mychart {
  width: 100%;
  height: 100%;
}
.ticket {
  overflow: hidden;
  font-size: 16px;
  display: flex;
  justify-content: center;
  align-items: center;
  .echarts-left {
    margin-top: 16px;
    width: 153px;
    height: 153px;
  }
  .text-right {
    margin-left: 21px;
    // margin-top: 30px;
    .text-right-item {
      width: 226px;
      margin-bottom: 10px;
      line-height: 24px;
      height: 24px;
    }
    .acitve {
      background: url(./img/xuanzhong.png) no-repeat;
    }
    .text-color {
      width: 3px;
      height: 16px;
      line-height: 16px;
      margin-right: 8px;
      margin-left: 13px;
      margin-top: 4px;
    }
    .text-right-item-title {
      width: 72px;
      font-size: 14px;
    }
    .color0 {
      background: radial-gradient(#a1ffb6 0%, #c7fff5 100%);
    }
    .color1 {
      background: radial-gradient(#7ab8ff 0%, #c7fff5 100%);
    }
    .color2 {
      background: radial-gradient(#a1ffb6 0%, #c7fff5 100%);
    }
    .color3 {
      background: radial-gradient(#a1ffb6 0%, #c7fff5 100%);
    }
    .text-border {
      width: 1px;
      height: 14px;
      margin: 4px 12px 0;
      border-right: 1px solid rgba(255, 255, 255, 0.4);
    }
  }
  .fix-position {
    top: -25px;
  }
}
</style>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

文心一言 VS 讯飞星火 VS chatgpt (242)-- 算法导论17.4 1题

一、假定我们希望实现一个动态的开地址散列表。为什么我们需要当装载因子达到一个严格小于 1 的值 a 时就认为表满&#xff1f;简要描述如何为动态开地址散列表设计一个插入算法&#xff0c;使得每个插入操作的摊还代价的期望值为 O(1) 。为什么每个插入操作的实际代价的期望值…

React基础知识大汇总

函数组件和类组件 函数组件与类组件有什么区别呢&#xff1f; function getName(params:{name:string}){const count 0;return params.name -count; } getName({name:"test"}) getName({name:"哈哈哈"})getName是一个纯函数&#xff0c;不产生任何副作用…

54、图论-实现Trie前缀树

思路&#xff1a; 主要是构建一个trie前缀树结构。如果构建呢&#xff1f;看题意&#xff0c;应该当前节点对象下有几个属性&#xff1a; 1、next节点数组 2、是否为结尾 3、当前值 代码如下&#xff1a; class Trie {class Node {boolean end;Node[] nexts;public Node(…

nginx配置挂载html

目标 很多软件的官方文档&#xff0c;在国内打开很慢&#xff0c;每次都得等很久&#xff0c;看到官方同时提供了html的包&#xff0c;所以想着挂载到本地nginx下&#xff0c;查看会方便很多。 下载官方html文档包&#xff0c;解压到documentation_htmls下 想添加新的文档也是…

Sql Server 数据库:查询表结构脚本

查询脚本: SELECT CASE WHEN col.colorder 1 THEN obj.name ELSE END AS 表名, col.colorder AS 序号 , col.name AS 列名 , ISNULL(ep.[value], ) AS 列说明 , t.name AS 数据类型 , col.length AS 长度 , ISNULL(COLUMNPROPERTY(col.id, col.name, Scale), 0) AS 小数位数…

<开源> 轮廓内缩外扩算法

轮廓内缩外扩算法 项目是论文A new offset algorithm for closed 2D lines with Islands的JAVA实现。 项目的GitHub地址&#xff1a;https://github.com/Lee-0o0/polygon-offset-algorithm。 参考博客 https://blog.csdn.net/qq_41261251/article/details/114462696

设计模式 -- 行为型模式

1. 行为型模式概述 行为型模式用于描述程序在运行时复杂的流程控制&#xff0c;即描述多个类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务&#xff0c;它涉及算法与对象间职责的分配。 行为型模式分为类行为模式和对象行为模式&#xff0c;前者采用继承机制在类…

java开发之路——node.js安装

1. 安装node.js 最新Node.js安装详细教程及node.js配置 (1)默认的全局的安装路径和缓存路径 npm安装模块或库(可以统称为包)常用的两种命令形式&#xff1a; 本地安装(local)&#xff1a;npm install 名称全局安装(global)&#xff1a;npm install 名称 -g本地安装和全局安装…

input的type=‘radio‘设置只读属性颜色为灰色,如何修改

目录 1.设置input和label的样式为不可点击。 2.设置input的readonly属性。 3.若想变回可修改&#xff0c;用js实现 4.如何自定义radio的颜色。 5.完整代码 input的单选框有时候需要实现只读&#xff0c;两个办法&#xff0c;一个disabled&#xff0c;一个是readonly. 但d…

前期Hadoop学习总结

前期Hadoop学习总结 1.Linux&#xff1a;操作系统 ​ 2.虚拟机&#xff1a;主机 3.SecureCRT &#xff08;客户端&#xff09;&#xff1a;连接Linux 方便操作 4.Hadoop&#xff1a;软件 这个软件要装在Linux里面 5.Hadoop是干嘛的&#xff1a; Hadoop是一个开源的分布式计…

前端路由的实现原理

当谈到前端路由时&#xff0c;指的是在前端应用中管理页面导航和URL的机制。前端路由使得单页应用&#xff08;Single-Page Application&#xff0c;SPA&#xff09;能够在用户与应用交互时动态地加载不同的视图&#xff0c;而无需每次都重新加载整个页面。 在前端开发中&…

货拉拉0-1数据指标体系构建与应用

目录 一、背景 二、指标体系搭建 2.1 指标设计 2.2 指标体系搭建 2.3 指标维度拆解 三、指标标准化建设 四、指标元数据管理 五、指标应用&未来规划 原文大佬介绍的这篇指标体系构建有借鉴意义&#xff0c;现摘抄下来用作沉淀学习。如有侵权请告知~ 一、背景 指标…

什么是仪器校准报告?

在科学实验和工业生产中&#xff0c;仪器是一种非常重要的辅助工具&#xff0c;无论是测量数据、控制实验进程还是保证产品质量&#xff0c;仪器都发挥着至关重要的作用。为了确保仪器的准确性和稳定性&#xff0c;仪器校准报告这一概念应运而生。本文给大家详细介绍仪器校准报…

利用STM32的定时器和中断实现精准时间控制

⬇帮大家整理了单片机的资料 包括stm32的项目合集【源码开发文档】 点击下方蓝字即可领取&#xff0c;感谢支持&#xff01;⬇ 点击领取更多嵌入式详细资料 问题讨论&#xff0c;stm32的资料领取可以私信&#xff01; 在嵌入式系统开发中&#xff0c;精确的时间控制是许多应用的…

0元实现网站HTTP升级到HTTPS(免费https证书)

HTTPS就是在HTTP的基础上加入了SSL&#xff0c;将一个使用HTTP的网站免费升级到HTTPS主要包括以下几个步骤&#xff1a; 1 获取SSL证书 永久免费的https证书申请通道https://www.joyssl.com/certificate/select/free.html?nid16 免费的SSL证书同样能实现HTTPS&#xff0c;国…

【前端】vue的基础知识及开发指引

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、Vue是什么二、学习 Vue.js 的基础知识三、熟悉 Vue.js 的生态系统四、掌握常用工具和库五、实践和项目开发六、 持续学习和跟进 前言 随着开发语言及人工智…

[Windows] Bypass分流抢票 v1.16.25 五一黄金周自动抢票软件(2024.02.08更新)

五一黄金周要来了&#xff0c;火车票难买到&#xff0c;即便官网候选订票也要看运气&#xff0c;推荐使用这个靠谱的自动抢票软件&#xff0c; 该工具是目前市面上最好用口碑最好的电脑抢票软件&#xff0c;从13年到现在&#xff0c;作者依旧在更新&#xff0c;可以自动识别123…

优秀博士学位论文分享:通往稳健在线学习的“在线集成”理论与方法

优秀博士学位论文代表了各学科领域博士研究生研究成果的最高水平&#xff0c;本公众号近期将推出“优秀博士学位论文分享”系列文章&#xff0c;对人工智能领域2023年优秀博士学位论文进行介绍和分享&#xff0c;方便广大读者了解人工智能领域最前沿的研究进展。 “CCF博士学位…

用于自动化机器陀螺仪传感器:XV7081BB

介绍一款用于自动化机器的数字输出型陀螺仪传感器XV7081BB。这款新推出的陀螺仪XV7081BB到底有什么魅力呢?我们可以用常用款用于智能割草机的XV7011BB作对比:XV7081BB提供16位或24位分辨率的角速率输出速率范围为400s。而XV7011BB采用16位角速度输出&#xff0c;检测范围为100…

软考 系统架构设计师系列知识点之大数据设计理论与实践(13)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之大数据设计理论与实践&#xff08;12&#xff09; 所属章节&#xff1a; 第19章. 大数据架构设计理论与实践 第4节 Kappa架构 19.4.2 Kappa架构介绍 Kappa架构由Jay Kreps提出&#xff08;Lambda由Storm之父Nayhan M…
最新文章