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 相关文章推荐
关于js拖拽上传 [一个拖拽上传修改头像的流程]
Jul 13 Javascript
JavaScript中的值类型详细介绍
Dec 29 Javascript
在JavaScript中使用对数Math.log()方法的教程
Jun 15 Javascript
Bootstrap每天必学之按钮
Nov 26 Javascript
详解ES6中的let命令
Apr 05 Javascript
Angular指令之restict匹配模式的详解
Jul 27 Javascript
微信小程序倒计时功能实现代码
Nov 09 Javascript
详解VUE2.X过滤器的使用方法
Jan 11 Javascript
node实现生成带参数的小程序二维码并保存到本地功能示例
Dec 05 Javascript
vue-cli构建vue项目的步骤详解
Jan 27 Javascript
js作用域和作用域链及预解析
Apr 11 Javascript
js实现随机圆与矩形功能
Oct 29 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
PHPThumb图片处理实例
2014/05/03 PHP
PHP获取文件扩展名的方法实例总结
2017/06/10 PHP
PHP简单装饰器模式实现与用法示例
2017/06/22 PHP
javascript中最常用的继承模式 组合继承
2010/08/12 Javascript
JavaScript Date对象 日期获取函数
2010/12/19 Javascript
jquery自定义滚动条插件示例分享
2014/02/21 Javascript
jquery插件之定时查询待处理任务数量
2014/05/01 Javascript
jquery常用方法及使用示例汇总
2014/11/08 Javascript
jQuery中Form相关知识汇总
2015/01/06 Javascript
详解JavaScript函数
2015/12/01 Javascript
使用JQuery实现智能表单验证功能
2016/03/08 Javascript
谈一谈js中的执行环境及作用域
2016/03/30 Javascript
JavaScript中${pageContext.request.contextPath}取值问题及解决方案
2016/12/08 Javascript
全面解析Node.js 8 重要功能和修复
2017/06/02 Javascript
浅谈Vue 性能优化之深挖数组
2018/12/11 Javascript
layui实现数据表格table分页功能(ajax异步)
2019/07/27 Javascript
详解mpvue开发微信小程序基础知识
2019/09/23 Javascript
vue中动态select的使用方法示例
2019/10/28 Javascript
Vue实现购物小球抛物线的方法实例
2020/11/22 Vue.js
[49:43]VG vs FNATIC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python实现人人网登录示例分享
2014/01/19 Python
python中的五种异常处理机制介绍
2014/09/02 Python
python书籍信息爬虫实例
2018/03/19 Python
使用python实现滑动验证码功能
2019/08/05 Python
python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)
2019/08/28 Python
Django使用rest_framework写出API
2020/05/21 Python
美国汽车交易网站:Edmunds
2016/08/17 全球购物
Darphin迪梵官网: 来自巴黎,植物和精油调制的护肤品牌
2016/10/11 全球购物
Timex手表官网:美国运动休闲手表品牌
2017/01/28 全球购物
香港莎莎官网Sasa.com:亚洲著名国际化妆品商城
2019/11/10 全球购物
乌克兰珠宝大卖场:Zlato.ua
2020/09/27 全球购物
我未来的职业规划范文
2014/01/11 职场文书
家长通知书教师评语
2014/04/17 职场文书
公司岗位说明书
2015/10/08 职场文书
2019垃圾分类宣传口号汇总
2019/08/16 职场文书
HTML5基础学习之文本标签控制
2022/03/25 HTML / CSS