【Echarts】Echarts在不同屏幕分辨率下不同配置

news2024/12/26 10:57:28

目录

    • 1、图表横坐标:分辨率低的情况下,刻度标签旋转的角度,在类目轴的类目标签显示不下的时候可以通过旋转防止标签之间重叠。
    • 2、图表图例:在 legend 文字超过6个字的时候对文字做裁剪并且开启 tooltip
  • 参考文章:
    • 1、使echarts图表随容器或屏幕变化而改变大小
    • 2、Echarts图表的使用以及如何适应屏幕变化
  • 🚀写在最后

1、图表横坐标:分辨率低的情况下,刻度标签旋转的角度,在类目轴的类目标签显示不下的时候可以通过旋转防止标签之间重叠。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

父组件:

       <div style="width:50%; margin:0 10px 0 0">
                <h6>销售额</h6>
                <div class="salesChart">
                  <el-table
                    v-loading="loading"
                    :data="isFormList"
                    :row-class-name="setRowClass"
                    :cell-class-name="setCellClass"
                    style="width: 45%;">
                    <el-table-column
                      :formatter="formatIndex"
                      label="排名"
                      header-align="center"
                      align="center"
                      min-width="25%"/>
                    <el-table-column
                      prop="class_name"
                      label="部门"
                      align="center"
                      header-align="center"
                      min-width="38%"
                    />
                    <el-table-column
                      align="right"
                      prop="sales_per"
                      min-width="37%"
                      header-align="center"
                      label="占比">
                      <template slot-scope="scope">
                        <span v-if="scope.row.sales_per">{{ scope.row.sales_per }}%</span>
                      </template>
                    </el-table-column>
                  </el-table>
                  <!--***********图表组件***********-->
                  <monthMain :is-form-list="isFormList" :height="month_sales_height" :style="{'width': '55%','height':month_sales_height+'px'}"/>
                  <!--                  <div id="main" style="width: 55%"/>-->
                </div>

              </div>

子组件:

<template>
  <div id="main1" :style="{height:height,width:width}"/>
</template>

<script>
import { formatNumToTen } from '../../../../utils/methods'
// 引入 ECharts 主模块
// var echarts = require('echarts/lib/echarts')
// 引入柱状图
require('echarts/lib/chart/bar')
// 引入折线图
require('echarts/lib/chart/line')
// 引入提示框和标题组件
require('echarts/lib/component/tooltip')
// require('echarts/lib/component/title');
require('echarts/lib/component/toolbox')
require('echarts/lib/component/legend')
export default {
  name: 'MonthMain',
  props: {
    isFormList: {
      type: Array,
      default: () => {
        return []
      }
    },
    width: {
      type: String,
      default: '100%'
    },
    height: {
      type: String,
      default: () => {
        return ''
      }
    }
  },
  watch: {
    isFormList: {
      handler(newName, oldName) {
        this.drawChart()
      }
    }
  },
  mounted() {
    this.drawChart()
  },
  methods: {
    drawChart() {
      // 基于准备好的dom,初始化echarts实例
      const myChart = this.$echarts.init(document.getElementById('main1'))

      const result = this.isFormList.map(a => a.sales)
      const result2 = this.isFormList.map(a => a.sales_per + '%')
      const result3 = this.isFormList.map(a => a.class_name)

      for (var i = 0; i < result.length / 2; i++) {
        var temp = result[i]
        result[i] = result[result.length - 1 - i]
        result[result.length - 1 - i] = temp
      }
      for (var i = 0; i < result2.length / 2; i++) {
        var temp = result2[i]
        result2[i] = result2[result2.length - 1 - i]
        result2[result2.length - 1 - i] = temp
      }
      for (var i = 0; i < result3.length / 2; i++) {
        var temp = result3[i]
        result3[i] = result3[result3.length - 1 - i]
        result3[result3.length - 1 - i] = temp
      }
      //********************修改此处********************************************
      // 获取当前窗口大小
      const windowWidth = window.innerWidth
      const windowHeight = window.innerHeight
      // 判断图表是否小于一定值
      if (windowWidth < 1800 && windowHeight < 1000) {
        var grid = {
          top: '50px',
          left: '3%',
          right: '15%',
          bottom: '3%',
          containLabel: true
        }
        // 设置 xAxis 属性
        var xAxis = {
          type: 'value',
          boundaryGap: [0, 0.01],
          axisLabel: {
            interval: 0,
            rotate: -30
          }
        }
      } else {
        grid = {
          top: '49px',
          left: '3%',
          right: '9%',
          bottom: '3%',
          containLabel: true
        }
        // 大屏幕下xAxis属性
        xAxis = {
          type: 'value',
          boundaryGap: [0, 0.01]
        }
      }
      //***************************新增结束*************************************
      // 指定图表的配置项和数据
      const option = {
        title: {
          text: '',
          subtext: ''
        },
        color: ['#FF8DAD'],
        tooltip: {
          trigger: 'axis',
          axisPointer: { // 坐标轴指示器,坐标轴触发有效
            type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
          },
          formatter: function(datas) {
            // var name = ''
            var index = datas[0].dataIndex
            datas[0].name = result3[index]
            var res = datas[0].name + '<br/>', val
            for (var i = 0, length = datas.length; i < length; i++) {
              val = formatNumToTen(datas[i].value) + '元'
              res += datas[i].marker + datas[i].seriesName + ':' + val + '<br/>'
            }
            return res
          }
        },
        legend: {
          data: []
        },
        backgroundColor: '#fff',
        //***********************修改此处*****************************************
        grid: grid,
        xAxis: xAxis,
        //***********************新增结束*****************************************
        yAxis: {
          type: 'category',
          data: result2,
          axisLabel: {
            show: false,
            interval: 0
          }
        },
        series: [
          {
            name: '月销售额',
            type: 'bar',
            barWidth: '25px',
            data: result

          }

        ]
      }
      // 使用刚指定的配置项和数据显示图表。
      myChart.setOption(option)
      // getDom() 获取 ECharts 实例容器的 dom 节点
      const chartName = this.$echarts.init(document.getElementById('main1'))
      chartName.getDom().style.height = this.height + 'px'
      // chartName.getDom().childNodes[0].style.height = this.month_sales_height + 'px'
      // chartName.getDom().childNodes[0].childNodes[0].setAttribute('height', this.month_sales_height)
      // chartName.getDom().childNodes[0].childNodes[0].style.height = this.month_sales_height + 'px'
      chartName.resize()
    }
  }
}
</script>

<style scoped>

</style>


2、图表图例:在 legend 文字超过6个字的时候对文字做裁剪并且开启 tooltip

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

myEcharts() {
      this.cityComplementBar = this.$echarts.init(document.getElementById('Chart1'))
      var data = []
      if (this.topsum) {
        for (const da in this.topsum) {
          data[da] = { value: this.topsum[da].sales, name: this.topsum[da].store_name }
        }
      }
       //************************修改此处******************************************************
      // 获取当前窗口大小
      const windowWidth = window.innerWidth
      const windowHeight = window.innerHeight
      // 判断图表是否小于一定值
      if (windowWidth < 1800 && windowHeight < 1000) {
        // 设置 legend 属性
        var legend = {
          type: 'scroll',
          orient: 'vertical',
          right: 10,
          top: 30,
          bottom: 20,
          // 在 legend 文字超过6个字的时候对文字做裁剪并且开启 tooltip
          formatter: name => name.length > 6 ? name.substr(0, 6) + '...' : name,
          tooltip: {
            show: true
          }
        }
      } else {
        // 大屏幕下legend属性,文字正常展示
        legend = {
          type: 'scroll',
          orient: 'vertical',
          right: 10,
          top: 30,
          bottom: 20
        }
      }
       //****************************新增结束**************************************************

      const option1 = {
        tooltip: {
          trigger: 'item',
          formatter: function(p) {
            var value = p.value
            var percent = p.percent
            if (value === null || value === undefined) {
              value = ''
            }
            if (percent === null || percent === undefined) {
              percent = ''
            }
            return p.name + ':' + '<br/>' + formatNumToTen(value) + '元' + '(' + percent + '%' + ')'
          }
        },
        //***********修改此处*******************
        legend: legend,
        //***********新增结束*******************
        color: getColorListByTen(10),
        series: [
          {
            name: '销售额',
            type: 'pie',
            radius: ['55%', '65%'],
            center: ['30%', '50%'],
            data: data,
            zIndex: 1,
            label: {
              show: true,
              position: 'center',
              formatter: function(params) {
                // return ''
                // if (params.dataIndex === 0) {
                if(params.name.length>=7){
                  // return ''
                  return '{p|' + params.percent + '%}' + '\n{nm|' + params.name.substring(0,8) + '\n'+ params.name.substring(8) + '}'
                }else{
                  return '{p|' + params.percent + '%}' + '\n{nm|' + params.name + '\n'+ '    ' + '}'
                }
                // } else {
                //   return ''
                // }
              },
              emphasis: {
                formatter: function(params) {
                  if(params.name.length>7){
                    return '{p|' + params.percent + '%}' + '\n{nm|' + params.name.substring(0,8) + '\n'+ params.name.substring(8) + '}'
                  }else{
                    return '{p|' + params.percent + '%}' + '\n{nm|' + params.name + '\n'+ '    ' +'}'
                  }
                }
              },
              rich: {
                p: {
                  color: '#323233',
                  fontSize: 16,
                  backgroundColor: '#fff',
                  width: 130,
                  height: 30,
                  fontWeight: 600
                },
                nm: {
                  color: '#323233',
                  fontSize: 15,
                  backgroundColor: '#fff',
                  width: 130,
                  height: 20
                }
              }
            }
          }
        ]
      }
      this.cityComplementBar.setOption(option1)
    },

参考文章:

1、使echarts图表随容器或屏幕变化而改变大小

使echarts图表随容器或屏幕变化而改变大小
分两种情况

一、屏幕大小变化导致echarts容器大小变化

如缩小浏览器页面,竖屏变横屏

this.myChart1 = echarts.init(document.getElementById("mychart"));
this.myChart1.setOption(option);
//随着屏幕大小调节图表
window.addEventListener("resize", () => {
     this.myChart1.resize();
});

详解代码:
在这里插入图片描述


二、屏幕大小不变但echarts容器大小变化

如菜单的折叠展开导致的主面板宽度变化,但浏览器屏幕大小是没有变的,这种情况下第一种方法不管用,则使用下述方法:

1.引入插件

npm install element-resize-detector --save

2.在所需页面导入

import elementResizeDetectorMaker from "element-resize-detector";

3.在mounted里使用

let erd = elementResizeDetectorMaker();
let that = this;
erd.listenTo(document.getElementById("echarts-box"), (element) => {
  that.$nextTick(() => {
    //使echarts尺寸重置
    that.myChart1.resize();
    that.myChart2.resize();
  });
});

2、Echarts图表的使用以及如何适应屏幕变化

Echarts图表的使用以及如何适应屏幕变化
在这里插入图片描述

🚀写在最后

希望我的分享能够帮助到更多的人,如果觉得我的分享有帮助的话,请大家一键三连支持一下哦~
❤️原创不易,期待你的关注与支持~
点赞👍+收藏⭐️+评论✍️
😊之后我会继续更新前端学习小知识,关注我不迷路~

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

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

相关文章

C盘每次开机都会减少空间

如果C盘在没有安装任何大型软件的情况下&#xff0c;每次开机都会大幅度压缩C盘空间&#xff0c;这是由于电脑睡眠文件导致的&#xff0c;只需要一行命令即可&#xff1b; 以管理员身份打开命令提示符窗口&#xff01; 然后输入 powercfg -h off ok&#xff0c;马上就好了。…

MQ和redis的内部原理一些总结

首先&#xff0c;先知道内部原理&#xff1b;其次&#xff0c;就是查官方文档实战了。 但是如果不熟悉内部原理&#xff0c;那么仅仅只是安装官方文档&#xff0c;并不能排除跟踪问题和故障、预防风险等策略&#xff1b; 以下总结图解&#xff1a;&#xff08;mysql 8.0新增的…

CAPL编程 - 事件驱动

1 事件概述 CAPL是一种面向过程、由事件驱动的类C语言。 事件驱动针对于顺序执行&#xff0c;其区别如下&#xff1a; 顺序执行&#xff1a;顺序执行流程中&#xff0c;子例程或过程函数按照代码编写顺序逐句执行。 事件驱动&#xff1a;CAPL程序由事件驱动&#xff0c;工程…

安装R和Rstudio

目录 一、安装R 二、安装Rstudio 一、安装R R官网&#xff1a;官网链接 点击CRAN 选择一个镜像 我用的winows&#xff0c;所以我选择 download R for windows 进去之后选择 base 点击下载 找到刚才下载的可执行文件&#xff0c;安装 选择语言 下一步 选择一个位置安装 下一…

数据保密新标杆:迅软DSE企业防泄密系统为企业安全保驾护航

由于目前数据安全防护边界越来越大&#xff0c;企业面临的内部安全风险正在快速增长&#xff1b;企业内部安全防护体系和管理制度一旦有所缺失&#xff0c;就会造成严重的数据泄露安全事故。面对互联网泄密事件层出不穷&#xff0c;企业管理者们对于企业数据安全管理如何落实到…

React 中 react-i18next 切换语言( 项目国际化 )

背景 平时中会遇到需求&#xff0c;就是切换语言&#xff0c;语种等。其实总的来说都是用i18n来实现的 思路 首先在项目中安装i18n插件&#xff0c;然后将插件引入到项目&#xff0c;然后配置语言包&#xff08;语言包需要你自己来进行配置&#xff0c;自己编写语言包&#xff…

【C++上层应用】2. 预处理器

文章目录 【 1. #define 预处理 】【 2. #ifdef、#if 条件编译 】2.1 #ifdef2.2 #if2.3 实例 【 3. # 和 ## 预处理 】3.1 # 替换预处理3.2 ## 连接预处理 【 4. 预定义宏 】 预处理器是一些指令&#xff0c;指示编译器在实际编译之前所需完成的预处理。 所有的预处理器指令都是…

Chat GPT 用于论文润色,常用指令这里都全了

ChatGPT在多个方面对科研人员提供帮助&#xff0c;其中之一就是SCI论文润色&#xff0c;通过输入论文的摘要、引言或者段落&#xff0c;科研人员可获得ChatGPT生成的回复&#xff0c;包括修改建议、语法纠正、表达方式优化等。 指令润色 比如&#xff1a; 请帮我润色论文&am…

我叫:插入排序【JAVA】

1.自我介绍 插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置&#xff0c;以达到排序的目的。 2.继承我的思想 插入排序(Insertion Sorting)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包…

SSD主控

《深入浅出SSD》学习中… 文章目录 《深入浅出SSD》学习中.....一、SSD主控二、PCIe和NVMe控制器前端子系统1.PCIe控制器2.NVMe控制器 一、SSD主控 就是类似电脑CPU的东西&#xff0c;在SSD中收取处理Host端的命令&#xff0c;管理NAND闪存 二、PCIe和NVMe控制器前端子系统 主…

2024中国人民大学计算机考研分析

24计算机考研|上岸指南 中国人民大学 中国人民大学计算机考研招生学院是信息学院。目前均已出拟录取名单。 中国人民大学在1978年创立了经济信息管理系&#xff0c;它是国内最早建立的将数学与信息技术在经济管理领域应用为特色的系科。1986年&#xff0c;在原系计算站的基础…

[计算机网络]网络层概述

呼,写了这么久终于重新开始啦! 自己落下了太多东西了.....是时候应该重新拾掇起来了. 关于后面的代码项目,我的想法是vilas.js仍然使用js来进行编写,但是后续其他的项目会开始尝试使用ts来进行书写了. 就算是前端也需要点规范吧..... 0.写在前面 这篇文章要和大家道个歉,首…

Flutter 使用 device_info_plus 遇到的问题

问题&#xff1a;引用device_info_plus 插件出现了异常&#xff0c;不知道为啥打开项目的时候就不能用了。 解决&#xff1a;改了版本解决 Target of URI doesnt exist: package:device_info_plus/device_info_plus.dart. (Documentation) Try creating the file reference…

每天学习一点点之 Spring Web MVC 之抽象 HandlerInterceptor 实现常用功能(限流、权限等)

背景 这里介绍一下本文的背景&#xff08;废话&#xff0c;可跳过&#xff09;。上周有个我们服务的调用方反馈某个接口调用失败率很高&#xff0c;排查了一下&#xff0c;发现是因为这个接口被我之前写的一个限流器给拦截了&#xff0c;随着我们的服务接入了 Sentinel&#x…

【数据结构(三)】单向环形链表和约瑟夫问题(3)

文章目录 1. 单向环形链表应用场景2. 思路分析3. 代码实现3.1. 实现单向环形链表3.2. 产生出队编号序列3.2.1. 思路分析3.2.2. 代码实现 1. 单向环形链表应用场景 Josephu(约瑟夫、约瑟夫环) 问题&#xff1a; 设编号为 1&#xff0c;2&#xff0c;… n 的 n 个人围坐一圈&…

电容的耐压值是什么意思呢?

电容是什么&#xff1f; 电容是一种能以电荷的形式储存能量的装置。与同样大小的电池相比&#xff0c;电容能储存的能量要小得多&#xff0c;大约1w个电容存储的能量才顶一节电池存储的能量&#xff0c;但对于许多电路设计来说却足够使用了。 看下图的直插式电容&#xff0c;…

【推荐】智元兔AI:一款集写作、问答、绘画于一体的全能工具!

在当今技术飞速发展的时代&#xff0c;越来越多的领域开始应用人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;。其中&#xff0c;AI写作工具备受瞩目&#xff0c;备受推崇。在众多的选择中&#xff0c;智元兔AI是一款在笔者使用过程中非常有帮助的…

FPGA_IIC代码-正点原子 野火 小梅哥 特权同学对比写法(1)

FPGA_IIC代码-正点原子 野火 小梅哥 特权同学对比写法&#xff08;1&#xff09; 单字节写时序单字节读时序I2C 控制器设计模块框图scl_high 和 scl_low 产生的时序图状态转移图 Verilog代码 FPGA_IIC代码-正点原子 野火 小梅哥 特权同学对比写法&#xff08;1&#xff09; FPG…

[Kettle] 生成记录

在数据统计中&#xff0c;往往要生成固定行数和列数的记录&#xff0c;用于存放统计总数 需求&#xff1a;为方便记录1~12月份商品的销售总额&#xff0c;需要通过生成记录&#xff0c;生成一个月销售总额的数据表&#xff0c;包括商品名称和销售总额两个字段&#xff0c;记录…

pycharm2023 实现鼠标点击某行,调试时代码运行至相应行

按下图取消 Breakpoints Over Line Numbers即可&#xff0c;然后调试时点击某行&#xff0c;代码就会运行至某行