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下function声明一些小结
Dec 28 Javascript
javascript错误的认识不用关心内存管理
Dec 15 Javascript
设置jsf的选择框h:selectOneMenu为不可编辑状态的方法
Jan 07 Javascript
基于socket.io和node.js搭建即时通信系统
Jul 30 Javascript
js限制文本框只能输入整数或者带小数点的数字
Apr 27 Javascript
jQuery增加和删除表格项目及实现表格项目排序的方法
May 30 Javascript
轻松理解JavaScript之AJAX
Mar 15 Javascript
jquery中$.fn和图片滚动效果实现的必备知识总结
Apr 21 jQuery
vue 的keep-alive缓存功能的实现
Mar 22 Javascript
Windows上node.js的多版本管理工具用法实例分析
Nov 06 Javascript
JS实现小米轮播图
Sep 21 Javascript
JS实现炫酷轮播图
Nov 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+sqlite数据库操作示例(创建/打开/插入/检索)
2016/05/26 PHP
详解php中 === 的使用
2016/10/24 PHP
php如何比较两个浮点数是否相等详解
2019/02/12 PHP
javascript 对象定义方法 简单易学
2009/03/22 Javascript
javascript 实用的文字链提示框效果
2010/06/30 Javascript
javascript操作字符串的原生方法
2014/12/22 Javascript
Vue实现购物车功能
2017/04/27 Javascript
基于DOM节点删除之empty和remove的区别(详解)
2017/09/11 Javascript
node使用Koa2搭建web项目的方法
2017/10/17 Javascript
p5.js临摹动态图形的方法
2019/10/23 Javascript
在Vue中使用Select选择器拼接label的操作
2020/10/22 Javascript
[03:37]2014DOTA2国际邀请赛 主赛事第一日胜者组TOPPLAY
2014/07/19 DOTA
[58:42]DOTA2上海特级锦标赛C组败者赛 Newbee VS Archon第一局
2016/02/27 DOTA
跟老齐学Python之编写类之二方法
2014/10/11 Python
分析用Python脚本关闭文件操作的机制
2015/06/28 Python
Tensorflow 实现修改张量特定元素的值方法
2018/07/30 Python
对python Tkinter Text的用法详解
2018/10/11 Python
Python爬虫beautifulsoup4常用的解析方法总结
2019/02/25 Python
pandas DataFrame行或列的删除方法的实现示例
2019/08/02 Python
利用Tensorflow的队列多线程读取数据方式
2020/02/05 Python
将不规则的Python多维数组拉平到一维的方法实现
2021/01/11 Python
详解如何修改jupyter notebook的默认目录和默认浏览器
2021/01/24 Python
科颜氏法国官网:Kiehl’s法国
2019/08/20 全球购物
英国最大的割草机购买网站:Just Lawnmowers
2019/11/02 全球购物
英国家居用品和床上用品零售商:P&B Home
2020/01/16 全球购物
阿迪达斯印尼官方网站:adidas印尼
2020/02/10 全球购物
类、抽象类、接口的差异
2016/06/13 面试题
火灾现场处置方案
2014/05/28 职场文书
小学优秀学生评语
2014/12/29 职场文书
委托函范文
2015/01/29 职场文书
颐和园英文导游词
2015/01/30 职场文书
故意伤害辩护词
2015/05/21 职场文书
婚宴父母致辞
2015/07/27 职场文书
严以律己学习心得体会
2016/01/13 职场文书
《学会看病》教学反思
2016/02/17 职场文书
MySQL count(*)统计总数问题汇总
2022/09/23 MySQL