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 相关文章推荐
JQERY limittext 插件0.2版(长内容限制显示)
Aug 27 Javascript
js利用prototype调用Array的slice方法示例
Jun 09 Javascript
BootStrap创建响应式导航条实例代码
May 31 Javascript
AngularJS入门教程之路由与多视图详解
Aug 19 Javascript
javascript设计模式Constructor(构造器)模式
Aug 19 Javascript
一句jQuery代码实现返回顶部效果(简单实用)
Dec 28 Javascript
js从输入框读取内容,比较两个数字的大小方法
Mar 13 Javascript
js构建二叉树进行数值数组的去重与优化详解
Mar 26 Javascript
js实现通过开始结束控制的计时器
Feb 25 Javascript
vue指令v-html使用过滤器filters功能实例
Oct 25 Javascript
vue项目中js-cookie的使用存储token操作
Nov 13 Javascript
记录一次websocket封装的过程
Nov 23 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
PHP 第三节 变量介绍
2012/04/28 PHP
PHP+Mysql实现多关键字与多字段生成SQL语句的函数
2014/11/05 PHP
CodeIgniter框架钩子机制实现方法【hooks类】
2018/08/21 PHP
基于jquery的lazy loader插件实现图片的延迟加载[简单使用]
2011/05/07 Javascript
Javascript 面向对象编程(一) 封装
2011/08/28 Javascript
用C/C++来实现 Node.js 的模块(二)
2014/09/24 Javascript
Jquery 实现checkbox全选方法
2015/01/28 Javascript
jquery仅用6行代码实现滑动门效果
2015/09/07 Javascript
深入理解JS继承和原型链的问题
2016/12/17 Javascript
jQuery实现文字自动横移
2017/01/08 Javascript
SpringMVC+bootstrap table实例详解
2017/06/02 Javascript
详谈vue+webpack解决css引用图片打包后找不到资源文件的问题
2018/03/06 Javascript
js+canvas实现简单扫雷小游戏
2021/01/22 Javascript
js动态添加带圆圈序号列表的实例代码
2021/02/18 Javascript
Python用GET方法上传文件
2015/03/10 Python
使用rpclib进行Python网络编程时的注释问题
2015/05/06 Python
简单谈谈Python中的元祖(Tuple)和字典(Dict)
2017/04/21 Python
Python WXPY实现微信监控报警功能的代码
2017/10/20 Python
Python2与python3中 for 循环语句基础与实例分析
2017/11/20 Python
Python文件操作方法详解
2020/02/09 Python
python 实现&quot;神经衰弱&quot;翻牌游戏
2020/11/09 Python
Django执行源生mysql语句实现过程解析
2020/11/12 Python
css3 旋转按钮 使用CSS3创建一个旋转可变色按钮
2012/12/31 HTML / CSS
详解rem 适配布局
2018/10/31 HTML / CSS
HTML5 source标签:媒介元素定义媒介资源
2018/01/29 HTML / CSS
Bandier官网:奢侈、时尚前卫的健身服装首选目的地
2020/07/05 全球购物
Java的基础面试题附答案
2016/01/10 面试题
国际经济贸易专业推荐信
2013/11/06 职场文书
大一期末自我鉴定
2013/12/13 职场文书
初一体育教学反思
2014/01/29 职场文书
一年级评语大全
2014/04/23 职场文书
青年志愿者活动总结
2014/04/26 职场文书
职务说明书范文
2014/05/07 职场文书
2015年个人现实表现材料
2014/12/10 职场文书
Nginx 502 Bad Gateway错误原因及解决方案
2021/03/31 Servers
nginx+lua单机上万并发的实现
2021/05/31 Servers