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国旗变换效果代码
Aug 13 Javascript
利用javascript实现全部删或清空所选的操作
May 27 Javascript
JavaScript支持的最大递归调用次数分析
Jun 24 Javascript
AngularJS入门教程(零):引导程序
Dec 06 Javascript
JavaScript保存并运算页面中数字类型变量的写法
Jul 06 Javascript
给easyui datebox扩展一个清空的实例
Nov 09 Javascript
AngularJS的脏检查深入分析
Apr 22 Javascript
vue自定义全局组件(自定义插件)的用法
Jan 30 Javascript
jquery点击回车键实现登录效果并默认焦点的方法
Mar 09 jQuery
Angular 4.x+Ionic3踩坑之Ionic3.x pop反向传值详解
Mar 13 Javascript
electron踩坑之dialog中的callback解决
Oct 06 Javascript
JS 4个超级实用的小技巧 提升开发效率
Oct 05 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
fleaphp crud操作之findByField函数的使用方法
2011/04/23 PHP
php文件上传的例子及参数详解
2013/12/12 PHP
ThinkPHP控制器间实现相互调用的方法
2014/10/31 PHP
javascript 特性检测并非浏览器检测
2010/01/15 Javascript
JQuery插件开发示例代码
2013/11/06 Javascript
js弹出确认是否删除对话框
2014/03/27 Javascript
js对象内部访问this修饰的成员函数示例
2014/04/27 Javascript
jQuery仿Flash上下翻动的中英文导航菜单实例
2015/03/10 Javascript
js使用split函数按照多个字符对字符串进行分割的方法
2015/03/20 Javascript
jQuery实现不断闪烁文字的方法
2015/05/15 Javascript
jQuery 跨域访问解决原理案例详解
2016/07/09 Javascript
Vuejs第九篇之组件作用域及props数据传递实例详解
2016/09/05 Javascript
原生js实现鼠标跟随效果
2017/02/28 Javascript
webpack实现热加载自动刷新的方法
2017/07/30 Javascript
微信小程序icon组件使用详解
2018/01/31 Javascript
原生JS实现自定义下拉单选选择框功能
2018/10/12 Javascript
JavaScript使用闭包模仿块级作用域操作示例
2019/01/21 Javascript
bootstrap datepicker的基本使用教程
2019/07/09 Javascript
[01:28:31]《加油DOTA》真人秀 第五期
2014/09/01 DOTA
[01:01:52]DOTA2-DPC中国联赛定级赛 SAG vs iG BO3第二场 1月9日
2021/03/11 DOTA
python指定写入文件时的编码格式方法
2018/06/07 Python
Python实现银行账户资金交易管理系统
2020/01/03 Python
PyTorch加载预训练模型实例(pretrained)
2020/01/17 Python
ipython jupyter notebook中显示图像和数学公式实例
2020/04/15 Python
python3.7添加dlib模块的方法
2020/07/01 Python
PHP面试题集
2016/12/18 面试题
工程测量与监理专业应届生求职信
2013/11/27 职场文书
个人评价范文分享
2014/01/11 职场文书
卫校中专生的自我评价
2014/01/15 职场文书
适用于所有创业者的创业计划书
2014/02/05 职场文书
2013年军训通讯稿
2014/02/05 职场文书
幼儿教师寄语集锦
2014/04/03 职场文书
测绘工程专业求职信
2014/07/15 职场文书
七一建党节演讲稿
2014/09/11 职场文书
优质护理服务心得体会
2016/01/22 职场文书
MySQL图形化管理工具Navicat安装步骤
2021/12/04 MySQL