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 相关文章推荐
超强的IE背景图片闪烁(抖动)的解决办法
Sep 09 Javascript
JavaScript内核之基本概念
Oct 21 Javascript
一些老手都不一定知道的JavaScript技巧
May 06 Javascript
javascript中SetInterval与setTimeout的定时器用法
Aug 24 Javascript
简述jQuery ajax的执行顺序
Jan 05 Javascript
jQuery插件zTree实现的基本树与节点获取操作示例
Mar 08 Javascript
BootStrap表单控件之文本域textarea
May 23 Javascript
node实现定时发送邮件的示例代码
Aug 26 Javascript
使用Vue构建可重用的分页组件
Mar 26 Javascript
vue中使用echarts制作圆环图的实例代码
Jul 27 Javascript
使用异步组件优化Vue应用程序的性能
Apr 28 Javascript
npx create-react-app xxx创建项目报错的解决办法
Feb 17 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
星际玩家的三大定律
2020/03/04 星际争霸
PHP循环获取GET和POST值的代码
2008/04/09 PHP
PHP内核探索:变量存储与类型使用说明
2014/01/30 PHP
基于CI框架的微信网页授权库示例
2016/11/25 PHP
php利用fsockopen GET/POST提交表单及上传文件
2017/05/22 PHP
PHP基于timestamp和nonce实现的防止重放攻击方案分析
2019/07/26 PHP
Javascript UrlDecode函数代码
2010/01/09 Javascript
JavaScript对象学习经验整理
2013/10/12 Javascript
jQuery选择器源码解读(一):Sizzle方法
2015/03/31 Javascript
JavaScript中getUTCMinutes()方法的使用详解
2015/06/10 Javascript
js控制TR的显示隐藏
2016/03/04 Javascript
基于AngularJs + Bootstrap + AngularStrap相结合实现省市区联动代码
2016/05/30 Javascript
javascript 正则表达式去空行方法
2017/01/24 Javascript
深入浅析Node.js单线程模型
2017/07/10 Javascript
Vue+axios实现统一接口管理的方法
2018/07/23 Javascript
Vuex 模块化使用详解
2019/07/31 Javascript
Vue+Node实现商品列表的分页、排序、筛选,添加购物车功能详解
2019/12/07 Javascript
[11:27]《一刀刀一天》之DOTA全时刻20:TI4总奖金突破920W TS赛事分析
2014/06/18 DOTA
[48:32]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python之Web框架Django项目搭建全过程
2017/05/02 Python
Python常用内置模块之xml模块(详解)
2017/05/23 Python
基于Python中求和函数sum的用法详解
2018/06/28 Python
详解python异步编程之asyncio(百万并发)
2018/07/07 Python
Pandas 解决dataframe的一列进行向下顺移问题
2019/12/27 Python
python实现人机五子棋
2020/03/25 Python
matlab 计算灰度图像的一阶矩,二阶矩,三阶矩实例
2020/04/22 Python
CSS3 2D模拟实现摩天轮旋转效果
2016/11/16 HTML / CSS
美国儿童玩具、装扮和玩偶商店:Magic Cabin
2018/09/02 全球购物
怎样自定义一个异常类
2016/09/27 面试题
小学毕业家长寄语
2014/01/19 职场文书
《画杨桃》教学反思
2014/04/13 职场文书
2014小学教师年度考核工作总结
2014/12/03 职场文书
借条格式范本
2015/05/25 职场文书
2015年主婚人婚礼致辞
2015/07/28 职场文书
golang 实现并发求和
2021/05/08 Golang
详解Redis主从复制实践
2021/05/19 Redis