当前位置: 首页 > article >正文

echarts自适应浏览器缩放代码

  • echarts 在 dom 上初始化时使用 echarts. init ,这个 dom 是实例容器,一般是一个具有高宽的 DIV 元素。
  • 不能在单个容器上初始化多个 ECharts 实例。 
  • echartsInstance.resize 改变图表尺寸,在容器大小发生改变时需要手动调用
  • echarts.resize() 的核心是监听 id=“myChart” 的那个 div 的尺寸变化,在其发生变化后调用 echarts.resize()。
  • 一、 布局+样式

    因为后面要测试高度变化,所以设定了高度 chartHeight 为变量。(直接写 height:100% 图表不显示)

  • <template>
      <div id="myChart" :style="{ height: chartHeight + 'px' }"></div>
    </template>
    
    <style>
    body {
      background-color: lightblue;
    }
    
    #myChart {
      width: 90%;
      background-color: lightgoldenrodyellow;
    }
    </style>

    二、js基本代码(vue3 写法)

    初始化 mychart 的高度,初始化一个柱状图:

  • var myChart = null;
    const chartHeight = ref(0);
    updateChartHeight();
    
    function updateChartHeight() {
      chartHeight.value = window.innerHeight * 0.9;
    }
    
    function initEcharts() {
      myChart = echarts.init(document.getElementById('myChart'));
      myChart.setOption({
        title: {
          text: 'ECharts 入门示例'
        },
        tooltip: {},
        xAxis: {
          data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
        },
        yAxis: {},
        series: [
          {
            name: '销量',
            type: 'bar',
            data: [5, 20, 36, 10, 10, 20]
          }
        ]
      });
    }
    三、监听 echarts 容器尺寸变化(以下简称div)
    1. 没有全屏时,div 宽度、高度发生变化
    这个很好办,直接用   window.addEventListener("resize", function())  监听就可以。
    
    function windowResize() {
      window.addEventListener("resize", () => {
        updateChartHeight();
        console.log('%c window.innerWidth', "color:blue", window.innerWidth);
        console.log('%c window.innerHeight', "color:blue", window.innerHeight);
        myChart.resize();//改变图表尺寸
      })
    }
    

  • <script setup>
    import { ref, onMounted } from 'vue';
    import * as echarts from 'echarts';
    
    var myChart = null;
    const chartHeight = ref(0);
    updateChartHeight();
    
    onMounted(() => {
      initEcharts();
      windowResize();
      watchEchart();
    })
    function updateChartHeight() {
      chartHeight.value = window.innerHeight * 0.9;
    }
    
    function initEcharts() {
      myChart = echarts.init(document.getElementById('myChart'));
      myChart.setOption({
        title: {
          text: 'ECharts 入门示例'
        },
        tooltip: {},
        xAxis: {
          data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
        },
        yAxis: {},
        series: [
          {
            name: '销量',
            type: 'bar',
            data: [5, 20, 36, 10, 10, 20]
          }
        ]
      });
    }
    
    function windowResize() {
      window.addEventListener("resize", () => {
        updateChartHeight();//这个必须放在这里
        console.log('%c window.innerWidth', "color:blue", window.innerWidth);
        console.log('%c window.innerHeight', "color:blue", window.innerHeight);
        // console.log("%c windowResize chartHeight ", "color:blue", chartHeight.value);
      })
    }
    
    function watchEchart() {
      const myChartSize = document.getElementById("myChart");
      var ro = new ResizeObserver(entries => {
        for (let entry of entries) {
          const cr = entry.contentRect;
          // console.log('myChart Element:', entry.target);
          console.log(`%c myChart Element  w:${cr.width}px  h:${cr.height}px`, "color:red");
          chartResize();
        }
      });
      ro.observe(myChartSize);
    }
    
    function chartResize() {
      myChart.resize();
    }
    
    </script>
    
    <template>
      <div id="myChart" :style="{ height: chartHeight + 'px' }"></div>
    </template>
    
    <style>
    body {
      background-color: lightblue;
    }
    
    #myChart {
      width: 90%;
      background-color: lightgoldenrodyellow;
    }
    </style>


http://www.kler.cn/a/370678.html

相关文章:

  • 如何在linux系统上完成定时开机和更新github端口的任务
  • 蓝桥杯 Python 组知识点容斥原理
  • Nginx三种不同类型的虚拟主机(基于域名、IP 和端口)
  • Android渲染Latex公式的开源框架比较
  • 51.WPF应用加图标指南 C#例子 WPF例子
  • 利用EXCEL进行XXE攻击
  • Redis与MySQL双写一致性的缓存模式
  • LeetCode 热题 100 之链表2
  • 三款计算服务器配置→如何选择科学计算服务器?
  • C++第八讲:STL--stack和queue的使用及模拟实现
  • 基于现代 C++17 的模块化视频质量诊断处理流程设计
  • Python入门:学会Python装饰器让你的代码如虎添翼!(Python如何不改动原有函数代码添加一些额外的功能)
  • 嵌入式linux系统中实现MPU6050的控制方法
  • Python OpenCV图像复原
  • HCIP 路由控制
  • GRE VPN(H3C)
  • node.js学习Day2
  • asp.net WebForm GridView高级应用
  • 精选免费剪辑软件,为你的视频创作添彩
  • 排序(一)插入排序,希尔排序,选择排序,堆排序,冒泡排序
  • Redis Bitmap介绍和使用场景
  • 《链表篇》---环形链表II(返回节点)
  • Pytorch笔记--RuntimeError: NCCL communicator was aborted on rank 3.
  • C#自定义事件的案例
  • 前端阻止用户调试(禁用F12,禁用右键菜单,禁用查看源代码,禁用复制,无限debugger断点)
  • 【Linux 从基础到进阶】高负载系统的优化与维护