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 相关文章推荐
JQuery 实现的页面滚动时浮动窗口控件
Jul 10 Javascript
js或css文件后面跟参数的原因说明
Jan 09 Javascript
多个checkbox被选中时如何判断是否有自己想要的
Sep 22 Javascript
如何防止JavaScript自动插入分号
Nov 05 Javascript
jQuery Chart图表制作组件Highcharts用法详解
Jun 01 Javascript
javascript和jQuery实现网页实时聊天的ajax长轮询
Jul 20 Javascript
JavaScript  event对象整理及详细介绍
Oct 10 Javascript
bootstrap table 表格中增加下拉菜单末行出现滚动条的快速解决方法
Jan 05 Javascript
微信小程序视图template模板引用的实例详解
Sep 20 Javascript
推荐15个最好用的JavaScript代码压缩工具
Feb 13 Javascript
JS实现电商商品展示放大镜特效
Jan 07 Javascript
html5 录制mp3音频支持采样率和比特率设置
Jul 15 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 checkdate、getdate等日期时间函数操作详解
2010/03/11 PHP
PHP生成Flash动画的实现代码
2010/03/12 PHP
Session服务器配置指南与使用经验的深入解析
2013/06/17 PHP
通过table标签,PHP输出EXCEL的实现方法
2013/07/24 PHP
php文档工具PHP Documentor安装与使用方法
2016/01/25 PHP
php将服务端的文件读出来显示在web页面实例
2016/10/31 PHP
php base64 编码与解码实例代码
2017/03/21 PHP
如何在centos8自定义目录安装php7.3
2019/11/28 PHP
JavaScript 学习笔记 Black.Caffeine 09.11.28
2009/11/30 Javascript
jQuery中live方法的重复绑定说明
2011/10/21 Javascript
js编码、解码函数介绍及其使用示例
2013/09/05 Javascript
jquery表单验证框架提供的身份证验证方法(示例代码)
2013/12/27 Javascript
js取整数、取余数的方法
2014/05/11 Javascript
Vue学习笔记之表单输入控件绑定
2017/09/05 Javascript
基于Cookie常用操作以及属性介绍
2017/09/07 Javascript
尝试自己动手用react来写一个分页组件(小结)
2018/02/09 Javascript
深入浅出理解JavaScript闭包的功能与用法
2018/08/01 Javascript
JS实现的点击按钮图片上下滚动效果示例
2019/01/28 Javascript
详解vuex持久化插件解决浏览器刷新数据消失问题
2019/04/15 Javascript
在vue-cli创建的项目中使用sass操作
2020/08/10 Javascript
Python pickle类库介绍(对象序列化和反序列化)
2014/11/21 Python
python爬虫_微信公众号推送信息爬取的实例
2017/10/23 Python
Python3.6笔记之将程序运行结果输出到文件的方法
2018/04/22 Python
Python迭代器与生成器用法实例分析
2018/07/09 Python
python 基于TCP协议的套接字编程详解
2019/06/29 Python
python将excel转换为csv的代码方法总结
2019/07/03 Python
搭建python django虚拟环境完整步骤详解
2019/07/08 Python
解决django migrate报错ORA-02000: missing ALWAYS keyword
2020/07/02 Python
Python学习工具jupyter notebook安装及用法解析
2020/10/23 Python
纯css3实现鼠标经过图片显示描述的动画效果
2014/09/01 HTML / CSS
H5页面适配iPhoneX(就是那么简单)
2019/12/02 HTML / CSS
物业经理求职自我评价
2013/09/22 职场文书
《最大的麦穗》教学反思
2014/04/17 职场文书
大学生个人学习总结
2015/02/15 职场文书
医务人员医德考评自我评价
2015/03/03 职场文书
2016优秀护士求职自荐信
2016/01/28 职场文书