vue中echarts图表大小适应窗口大小且不需要刷新案例


Posted in Javascript onJuly 19, 2020

我就废话不多说了,大家还是直接看代码吧~

内容如下:

// 基于准备好的dom,初始化echarts实例
let myChart = this.$echarts.init(document.getElementById('myChart'))
//根据窗口的大小变动图表 --- 重点
window.onresize = function(){
  myChart.resize();
  //myChart1.resize();  //若有多个图表变动,可多写
 
}

代码如下:

mounted() {
  
 const that = this
   window.onresize = () => {// 根据窗口大小调整曲线大小
   let myChart = this.$echarts.init(document.getElementById('myChart'));
    myChart.resize();
   }
 },

补充知识:如何解决Vue项目中使用echarts,宽度变化导致图不能resize问题

情景:

开发PC端管理系统,项目左侧目录可收缩,右侧是对应的页面,右侧页面里面包含了echarts开发的几个折线图,如图:

vue中echarts图表大小适应窗口大小且不需要刷新案例

当左侧目录展开的时候,会把右侧页面压缩,右侧页面的echarts折线图宽度就会发生改变,因为项目考虑到适配大屏的问题,所以,右侧两个echarts使用的都是百分比宽度,左侧菜单展开后的样子如图:

vue中echarts图表大小适应窗口大小且不需要刷新案例

vue中echarts图表大小适应窗口大小且不需要刷新案例

会导致echarts折线图超出画布,所以为了解决这个问题,

第一个想法是:

通过js逻辑判断左侧菜单是否展开来动态改变echarts折线图的宽度,结果是 没有用;

第二个想法是:

通过动态判断左侧菜单是否撑开,然后在右侧文件mounted生命周期里写一个无限定时器,每间隔500毫秒动态执行下,初始化echarts折线图的方法,结果:也没用

最终百度了一波,通过网上其他大佬写的博客,找到了解决方法:

划重点

1.引入 element-resize-detector依赖

2.新建 chart.resize.js 文件,添加下面代码

import echarts from 'echarts';
import Vue from 'vue';
import elementResizeDetectorMaker from "element-resize-detector"

export var version = '0.0.1';
var compatible = (/^2\./).test(Vue.version);
if (!compatible) {
  Vue.util.warn('vue echarts resize directive ' + version + ' only supports Vue 2.x, and does not support Vue ' + Vue.version);
}
let HANDLER = "_vue_echarts_resize_handler"

function bind(el) {
  unbind(el);
  el[HANDLER] = function () {
    let chart = echarts.getInstanceByDom(el);
    if (!chart) {
      return;
    }
    chart.resize();
  }
  //监听window窗体变化,更新echarts大小
  //window.addEventListener("resize", el[HANDLER])
  //监听绑定的div大小变化,更新echarts大小
  elementResizeDetectorMaker().listenTo(el,el[HANDLER])
  
}
function unbind(el) {
  //window.removeEventListener("resize", el[HANDLER]);
  elementResizeDetectorMaker().removeListener(el,el[HANDLER])
  delete el[HANDLER];
}
var directive = {
  bind: bind,
  unbind: unbind
};
Vue.directive("on-echart-resize", directive)

然后需要对应的在 echarts 图 上绑定一个 v-on-echart-resize

不绑定 v-on-echart-resize ,不起效果 ,亲测

<template>
 <div id="leftEchartsLine" ref="leftEchartsLine" v-on-echart-resize></div>
</template>

v-on-echart-resize

这个是新增的 ,之前没有

引入

import elementResizeDetectorMaker from "element-resize-detector";

import "./chart.resize";

然后在 mounted 写

mounted() {
  let erd = elementResizeDetectorMaker();
  let that = this;
  erd.listenTo(document.getElementById("leftEchartsLine"), (element) => {
   let width = element.offsetWidth;
   let height = element.offsetHeight;
   that.$nextTick(() => {
    //使echarts尺寸重置
    that.echarts.init(document.getElementById("leftEchartsLine")).resize();
   });
  });
 },

改完后的样子:

vue中echarts图表大小适应窗口大小且不需要刷新案例

这样就能解决 echarts 折线图,宽度变化 ,导致的图不能resize问题咯~~~

以上这篇vue中echarts图表大小适应窗口大小且不需要刷新案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript实例教程(19) 使用HoTMetal(1)
Dec 23 Javascript
javascript 选择文件夹对话框(web)
Jul 07 Javascript
用js做一个小游戏平台 (一)
Dec 29 Javascript
node.js中的http.response.writeHead方法使用说明
Dec 14 Javascript
JavaScript中使用自然对数ln的方法
Jun 14 Javascript
再谈JavaScript异步编程
Jan 27 Javascript
js实现四舍五入完全保留两位小数的方法
Aug 02 Javascript
Javascript中字符串replace方法的第二个参数探究
Dec 05 Javascript
Bootstrap中data-target 到底是什么
Feb 14 Javascript
jquery一键控制checkbox全选、反选或全不选
Oct 16 jQuery
判断div滑动到底部的scroll实例代码
Nov 15 Javascript
js实现简易ATM功能
Oct 27 Javascript
完美解决vue 中多个echarts图表自适应的问题
Jul 19 #Javascript
vue实现多个echarts根据屏幕大小变化而变化实例
Jul 19 #Javascript
解决vue一个页面中复用同一个echarts组件的问题
Jul 19 #Javascript
浅谈vue单页面中有多个echarts图表时的公用代码写法
Jul 19 #Javascript
echarts.js 动态生成多个图表 使用vue封装组件操作
Jul 19 #Javascript
JavaScript中reduce()的5个基本用法示例
Jul 19 #Javascript
JS中作用域以及变量范围分析
Jul 18 #Javascript
You might like
discuz authcode 经典php加密解密函数解析
2020/07/12 PHP
php中通过curl smtp发送邮件
2012/06/05 PHP
使用dump函数,给php加断点测试
2013/06/25 PHP
php使用imagick模块实现图片缩放、裁剪、压缩示例
2014/04/17 PHP
JavaScript 全角转半角部分
2009/10/28 Javascript
jquery(live)中File input的change方法只起一次作用的解决办法
2011/10/21 Javascript
js网页实时倒计时精确到秒级
2014/02/10 Javascript
jquery实现页面图片等比例放大缩小功能
2014/02/12 Javascript
浅谈Sizzle的“编译原理”
2015/04/14 Javascript
详解javascript遍历方式
2015/11/11 Javascript
jQuery购物车插件jsorder用法(支持后台处理程序直接转换成DataTable处理)
2016/06/08 Javascript
功能强大的Bootstrap效果展示(二)
2016/08/03 Javascript
vue子组件使用自定义事件向父组件传递数据
2017/05/27 Javascript
jQuery实现判断滚动条滚动到document底部的方法分析
2019/08/27 jQuery
如何利用Node.js与JSON搭建简单的动态服务器
2020/06/16 Javascript
[44:09]DOTA2上海特级锦标赛A组小组赛#1 EHOME VS MVP.Phx第二局
2016/02/25 DOTA
[10:18]2018DOTA2国际邀请赛寻真——Fnatic能否笑到最后?
2018/08/14 DOTA
python实现将pvr格式转换成pvr.ccz的方法
2015/04/28 Python
python数据结构链表之单向链表(实例讲解)
2017/07/25 Python
python实现简易云音乐播放器
2018/01/04 Python
用Python进行简单图像识别(验证码)
2018/01/19 Python
Python Django Vue 项目创建过程详解
2019/07/29 Python
使用Pandas对数据进行筛选和排序的实现
2019/07/29 Python
python多线程实现代码(模拟银行服务操作流程)
2020/01/13 Python
Python selenium文件上传下载功能代码实例
2020/04/13 Python
通过CSS3的object-fit来调整图片适配尺寸的技巧简介
2016/02/27 HTML / CSS
致短跑运动员广播稿
2014/01/09 职场文书
开业庆典答谢词
2014/01/18 职场文书
三年级科学教学反思
2014/01/29 职场文书
书法比赛获奖感言
2014/02/10 职场文书
业务部门经理岗位职责
2014/02/23 职场文书
公关活动策划方案
2014/05/25 职场文书
2015年董事长秘书工作总结
2015/07/23 职场文书
为什么MySQL 删除表数据 磁盘空间还一直被占用
2021/10/16 MySQL
Python中 range | np.arange | np.linspace三者的区别
2022/03/22 Python
让JavaScript代码更加精简的方法技巧
2022/06/01 Javascript