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

目录

    • 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图表的使用以及如何适应屏幕变化
在这里插入图片描述

🚀写在最后

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

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

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

相关文章

mybatis使用foreach标签实现union集合操作

最近遇到一个场景就是Java开发中&#xff0c;需要循环多个表名&#xff0c;然后用同样的查询操作分别查表&#xff0c;最终得到N个表中查询的结果集合。在查询内容不一致时Java中跨表查询常用的是遍历表名集合循环查库&#xff0c;比较耗费资源&#xff0c;效率较低。在查询内容…

作为测试你连K8S都不懂,你还有脸说自己是测试?

kubernetes&#xff0c;简称 K8s&#xff0c;是用 8 代替中间 8 个字符 “ubernete” 而成的缩写&#xff0c;是一个开源的&#xff0c;用于管理云平台中多个主机上的容器化的应用&#xff0c;Kubernetes 的目标是让部署容器化的应用简单并且高效(powerful)&#xff0c;Kuberne…

高版本Vivado和Linux 4.x内核移植Digilent Driver

移植环境 Vivado 2022.2Ubuntu 22.04petalinux 2022.2Linux内核4.14&#xff08;xilinx-linux-2018.3&#xff09;linux-digilent 主要问题 https://github.com/Digilent/linux-digilent 这些驱动支持Linux kernel release 4.x&#xff0c;然而和Vitis 2022.2 套件对应的内核…

【自我管理】To-do list已过时?学写Done List培养事业成功感

自我管理&#xff1a;已完成清单&#xff08;doneList&#xff09;培养事业成功感 待办事项清单常常让人感到压力山大&#xff0c;让人不想面对工作。但是&#xff0c;你知道吗&#xff1f;除了待办清单之外&#xff0c;还有一个叫做「已完成清单」的东西&#xff0c;它可能更符…

元宇宙外科手术vrar仿真实验室平台提高了培训效率和安全性

在科研与教育的领域中&#xff0c;实验室的作用举足轻重。然而&#xff0c;传统实验室受限于时间、空间、资源等因素&#xff0c;难以满足日益增长的科研与教育需求。在这一背景下&#xff0c;3D元宇宙仿真实验室应运而生&#xff0c;以其独特的优势&#xff0c;成为科研与教育…

【windows 清理redis 缓存】

redis-cli.exe flushall flushdb

大数据时代,怎样通过日志分析保护我们的数据!

在今天的大数据时代&#xff0c;大量的数据被生成和存储。对于IT行业来说&#xff0c;日志文件是宝贵的信息财富。 通过合理的日志分析和解读&#xff0c;可以帮助企业提高运维效率、加强安全防护、改进产品质量和优化用户体验&#xff0c;本文将深入探讨日志分析在IT中的重要性…

成都优优聚美团代运营:塑造卓越优势,引领电商新时代

在当今这个数字化时代&#xff0c;美团作为中国最大的本地生活服务平台之一&#xff0c;正在为消费者和商家搭建一个无缝链接的桥梁。而在成都&#xff0c;有一家名为优优聚美团代运营的公司&#xff0c;他们凭借着专业的技能和高效的服务&#xff0c;成为了美团平台上的佼佼者…

linux上交叉编译qt库

linux上交叉编译qt库 Qt程序从X86平台Linux移植到ARM平台Linux需要做什么 1.在ubuntu上使用qt的源码交叉编译出Qt库 2.将编译好的库拷贝到开发板上并设置相应的环境变量&#xff08;库路径啥的&#xff09; 前两步一劳永逸&#xff0c;做一次就行 3.X86上写好程序代码&…

企业微信将应用安装到工作台

在上篇中介绍了配置小程序应用及指令、数据回调获取第三方凭证&#xff1b; 本篇将介绍如何将应用安装到企业工作台。 添加测试企业 通过【应用管理】->【测试企业配置】添加测试企业。 通过企业微信扫描二维码添加测试企业。 注意&#xff1a;需要扫描的账号为管理员权限…

C#中.NET 7.0 Windows窗体应用通过EF访问已有数据库并实现追加、删除、修改、插入记录

目录 一、前言 1.Database.ExecuteSqlCommand 方法不被EF7.0支持 2.SET IDENTITY_INSERT Blog {ON,OFF}不起作用 3.主键和标识列分离&#xff0c;成功实现插入与修改 二、新建本文涉及的项目 三、程序设计 1.Form1.cs源码 2.Form1.cs[设计] 四、生成和测试 1.原始表 …

【EI会议征稿】2024年电气技术与自动化工程国际学术会议 (ETAE 2024)

2024年电气技术与自动化工程国际学术会议 (ETAE 2024) 2024 International Conference on Electrical Technology and Automation Engineering 2024年电气技术与自动化工程国际学术会议 (ETAE 2024) 将于2024年3月8-10日在中国杭州召开。电气工程及其自动化和人们的日常生活…

Vue3的7种和Vue2的12种组件通信

Vue3 组件通信方式 props$emitexpose / ref$attrsv-modelprovide / injectVuex Vue3 通信使用写法 props 用 props 传数据给子组件有两种方法&#xff0c;如下 方法一&#xff0c;混合写法 // Parent.vue 传送 <child :msg1"msg1" :msg2"msg2">…

CLIP浅谈

CLIP论文地址&#xff1a;Learning Transferable Visual Models From Natural Language Supervision CLIP代码地址&#xff1a;https://github.com/openai/CLIP 简介 CLIP是OpenAI在2021年2月发表的一篇文章&#xff0c;它的主要贡献有以下2点&#xff1a; 1&#xff09;将图…

MCU内存基础知识

文章目录 一、存储器分类二、C语言内存分区内存区三、STM32启动文件分析四、应用分析 一、存储器分类 RAM&#xff08;Random Access Memory) &#xff1a;掉电之后就丢失数据&#xff0c;读写速度块 ROM (Read Only Memory) &#xff1a;掉电之后仍然可以保持数据 单片机的RA…

【Java SE】 详解java访问限定符

访问限定符 Java中主要通过类和访问权限来实现封装&#xff1a;类可以将数据以及封装数据的方法结合在一起&#xff0c;更符合人类对事物的认知&#xff0c;而访问权限用来控制方法或者字段能否直接在类外使用。Java中提供了四种访问限定符&#xff1a; 实际只有三种访问限定…

纯CSS动态渐变文本特效

如图所示&#xff0c;这是一个炫酷的文本渐变效果&#xff0c;如同冰岛的极光一般。本次的文章让我们逐步分解代码&#xff0c;了解其实现原理。 基于以上动图效果可以分析以下是本次动效实现的主要几点&#xff1a; 文本中有多个颜色的动画每个颜色显示的半径不同&#xff0…

亚马逊化妆品护肤品等HRIPT/RIPT重复性斑贴测试如何办理?

一、哪类产品需要HRIPT / RIPT斑贴试验&#xff1a; HRIPT&#xff08;人体重复斑点试验&#xff09;和RIPT&#xff08;人体斑点试验&#xff09;是化妆品相关的测试&#xff0c;用于评估化妆品是否可能引起皮肤敏感和过敏反应。只有化妆品类产品需要进行HRIPT / RIPT斑贴试验…

五分钟搭建开源ERP:Odoo,并实现公网远程访问

文章目录 前言1. 下载安装Odoo&#xff1a;2. 实现公网访问Odoo本地系统&#xff1a;3. 固定域名访问Odoo本地系统 前言 Odoo是全球流行的开源企业管理套件&#xff0c;是一个一站式全功能ERP及电商平台。 开源性质&#xff1a;Odoo是一个开源的ERP软件&#xff0c;这意味着企…

普通函数VS箭头函数

首先给大家看一个代码 const jonas {year: 1995,calcAge: function () {console.log(this);console.log(2038 - this.year);},greet: () > console.log(Hey ${this.firstName}), };jonas.greet();这个会输出什么&#xff1f; 这个我们上篇文章中讲过&#xff0c;箭头函数…