VUE:echarts如何适应宽度【附封装的简单柱状图组件页面参数设置】

news/2024/7/10 2:29:16 标签: vue, echarts

简介

在使用echarts时,发现它不是自适应的。
比如浏览器全屏时打开了有echarts的页面,加载完后,缩小窗口,就会很奇怪,所以研究了一下怎么实现主动适应。
在这里插入图片描述

具体实现

  1. app.vue中通过window.onresize事件进行实时存储值,vuex中写一个数字++的方法
// app.vue
  // 初始化数据
  initDataFun() {
    // 监听屏幕高度、宽度变化,同步存储高度、宽度
    window.onresize = () => {
      return (() => {
          this.$store.commit('common/SET_WINDOW_ONRESIZE'); // 通知网页内容区域可视化宽高有变化
      })();
    };
  }

// vuex
  const state = {
    windowOnResizeNum: 0
  }
  const mutations = {
    // 通知浏览器宽高有变化
    SET_WINDOW_ONRESIZE: (state) => {
      state.windowOnResizeNum++;
    }
  }
  1. echarts组件中引入vuex存储的宽高值,并进行监听,
    宽高值有变化时,重新初始化echarts的大小
    **

echartsdom_34">注意:echarts所在dom容器,宽度需要百分比,高度看使用情况

**,否则还要什么适应宽度呢?

之所以dom用的ref,是因为这是封装的组件,就不能用id(id全局唯一)。

// echarts组件
import { mapGetters } from 'vuex';
export default {
  watch: {
    // 监听浏览器可视区域宽高是否变化
    windowOnResizeNum() {
      this.resizeByWindowFun(); // 初始化echarts图表大小
    },
  },
  computed: {
    ...mapGetters(['screenHeight', 'screenWidth']),
  },
  methods: {
    // 根据窗口大小 初始化echarts图表大小
    resizeByWindowFun() {
      echarts.init(this.$refs.myChartBar).resize();
    },
  },
}

大小窗口时的效果图

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

完整代码,附封装的简单柱状图组件页面参数设置

<template>
  <div ref="myChartBar" :style="{ width: width, height: height }"></div>
</template>

<script>
import { mapGetters } from 'vuex';
// 引入基本模板
let echarts = require('echarts/lib/echarts');
// 引入柱状图组件
require('echarts/lib/chart/bar');
// 引入提示框和title组件
require('echarts/lib/component/tooltip');
require('echarts/lib/component/title');
export default {
  props: {
    // 数据
    barData: {
      type: Object,
      default() {
        return {
          title: '统计图标题', // 标题
          xAxis: {
            data: [],
          }, // x轴数据
          yAxis: {
            min: null,
            max: null,
          }, // y轴数据
          series: {
            data: [],
          }, // 移入提示数据
        };
      },
    },
    // 宽度-------------划重点---!!!想要自适应,宽度就要百分比,不能固定值!!!--------------
    width: {
      type: String,
      default: '100%',
    },
    // 高度--------合理大小就行,别放大时太扁,缩小时太高
    height: {
      type: String,
      default: '400px',
    },
  },
  data() {
    return {};
  },
  mounted() {
    this.initDataFun({
        xAxis: {
          data: [
            '期终考试',
            '期中考试',
            '期末考试',
            '4月',
            '5月',
            '6月',
            '7月',
            '8月',
            '9月',
            '10月',
            '11月',
            '12月',
          ],
        }, // x轴数据
        series: {
          data: [
            1113,
            823,
            1140,
            1110,
            405,
            813,
            823,
            389,
            678,
            407,
            1178,
            789,
          ],
        }, // 移入提示数据
      }); // 初始化数据
  },
  watch: {
    // 监听浏览器可视区域宽高是否变化
    windowOnResizeNum() {
      this.resizeByWindowFun(); // 初始化echarts图表大小
    },
  },
  computed: {
    ...mapGetters(['windowOnResizeNum']),
  },
  methods: {
    // 初始化数据
    initDataFun(barData) {
      var dataShadow = [];
      // 基于准备好的dom,初始化echarts实例
      let myChart = echarts.init(this.$refs.myChartBar);
      // 绘制图表
      myChart.setOption({
        // title: { text: barData.title },
        tooltip: {},
        xAxis: {
          type: 'category',
          data: barData.xAxis.data,
        },
        yAxis: {
          type: 'value',
          // min: barData.yAxis.min,
          // max: barData.yAxis.max,
        },
        series: [
          {
            type: 'bar',
            data: barData.series.data,
            showBackground: true,
            backgroundStyle: {
              color: 'rgba(180, 180, 180, 0.2)',
            },
            itemStyle: {
              color: '#1890FF',
            },
            emphasis: {
              itemStyle: {
                color: '#1890FF',
              },
            },
          },
        ],
      });
    },
    // 根据窗口大小 初始化echarts图表大小
    resizeByWindowFun() {
      echarts.init(this.$refs.myChartBar).resize();
    },
  },
};
</script>

<style scoped></style>

最后

觉得有用的朋友请用你的金手指点一下赞,或者评论留言一起探讨技术!


http://www.niftyadmin.cn/n/1867219.html

相关文章

170716 网线接口顺序

第一次接网线&#xff0c;以下是接口的顺序&#xff0c;Mark一下

VUE:axios的post、delete请求,只传一个数组时,后台接收不到数据

简介 axios的delete、post请求&#xff0c;只传一个数组时&#xff0c;后台接收不到数据&#xff0c;接口就报错400。 查看了请求接口的请求头中的信息&#xff0c;发现&#xff0c;“Content-Type"是"text/plain” 具体实现 解决的方式很简单&#xff0c;在axi…

170718 Linux 文件路径切换与查找

cd &#xff5e; # 切换到根目录 ls -a # 列表all全显示 look for hidden files: View - Show Hidden - Files

VUE:vue-cli4创建普通vue3项目及环境搭建

简介 关于vue-cli4.x创建vue3项目及环境搭建 一、项目创建 以下创建操作都是在CMD命令管理器里面操作的。 1.首先很重要的一点&#xff0c;在一个要创建vue项目的文件夹下查看你的vue cli的版本&#xff01; 注意&#xff1a;要4.0以上&#xff08;3.x的安装有些微区别&am…

170718 Keras.applications.models权重在线加载中断问题的解决办法

由于网速慢或网络中断原因导致keras加载vgg16等模型权重失败&#xff0c; 导致无法使用&#xff0c;对于这个问题的直接解决方法是&#xff1a;删掉下载文件&#xff0c;再重新下载 Github方法&#xff1a; Windows-weights路径&#xff1a; C:\Users\你的用户名\.keras\mode…

VUE:axios配置及接口请求路径api配置

简介 关于vue中使用axios请求的配置&#xff0c;注意其中区分Vue2.0和Vue3.0的写法。 一、axios配置 由于可能会有多个插件应用&#xff0c;所以有了plugins&#xff08;utils里面放的是封装的事件处理方法&#xff09;&#xff0c;自行新建相关文件 1.安装axios npm ins…

170718 python3.x install PIL

PIL P ython I mage L ibrary&#xff0c;最初支持python2.x 在python3.x下下载&#xff0c;则需要&#xff1a; pip install pillow 或 conda install pillow

170719 Keras重复运行结果不一致问题

Github-2743 Github-2479 不同版本的keras,对同样的代码,得到不同结果的原因总结 用深度学习每次得到的结果都不一样,怎么办? 单独设置seed的方法适合于CPU&#xff0c;GPU不适用 指定随机数ShuffleFalse方法&#xff08;认为模型结果的不确定性与采样训练时的随机种子有…