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 网页水印(非图片水印)实现代码
Mar 01 Javascript
分享一个用Mootools写的鼠标滑过进度条改变进度值的实现代码
Dec 12 Javascript
JS小功能(onmouseover实现选择月份)实例代码
Nov 28 Javascript
jquery控制背景音乐开关与自动播放提示音的方法
Feb 06 Javascript
js实现带圆角的多级下拉菜单效果
Aug 28 Javascript
15个非常实用的JavaScript代码片段
Dec 18 Javascript
jQuery Ajax全解析
Feb 13 Javascript
jQuery图片瀑布流的简单实现代码
Mar 15 Javascript
Angualrjs 表单验证的两种方式(失去焦点验证和点击提交验证)
May 09 Javascript
layui实现给某一列加点击事件
Oct 26 Javascript
vue响应式原理与双向数据的深入解析
Jun 04 Vue.js
vue-treeselect的基本用法以及解决点击无法出现拉下菜单
Apr 30 Vue.js
完美解决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
ThinkPHP数据操作方法总结
2015/09/28 PHP
PHP数字前补0的自带函数sprintf 和number_format的用法(详解)
2017/02/06 PHP
PHP面向对象程序设计之多态性的应用示例
2018/12/19 PHP
Thinkphp5.0框架视图view的模板布局用法分析
2019/10/12 PHP
Code: write(s,d) 输出连续字符串
2007/08/19 Javascript
悄悄用脚本检查你访问过哪些网站的代码
2010/12/04 Javascript
基于jquery的button默认enter事件(回车事件)。
2011/05/18 Javascript
jQuery寻找n以内完全数的方法
2015/06/24 Javascript
JS运动相关知识点小结(附弹性运动示例)
2016/01/08 Javascript
功能强大的Bootstrap效果展示(二)
2016/08/03 Javascript
微信小程序 MINA文件结构
2016/10/17 Javascript
浅谈angularjs module返回对象的坑(推荐)
2016/10/21 Javascript
Vue应用部署到服务器的正确方式
2017/07/15 Javascript
js数组实现权重概率分配
2017/09/12 Javascript
微信小程序 POST请求的实例详解
2017/09/29 Javascript
图片加载完成再执行事件的实例
2017/11/16 Javascript
微信小程序使用form表单获取输入框数据的实例代码
2018/05/17 Javascript
node删除、复制文件或文件夹示例代码
2019/08/13 Javascript
vue控制多行文字展开收起的实现示例
2019/10/11 Javascript
微信小程序 button样式设置为图片的方法
2020/06/19 Javascript
Python中的CURL PycURL使用例子
2014/06/01 Python
Python生成随机密码
2015/03/10 Python
Python使用matplotlib简单绘图示例
2018/02/01 Python
Python将图片转换为字符画的方法
2020/06/16 Python
Django2 连接MySQL及model测试实例分析
2019/12/10 Python
Python2与Python3关于字符串编码处理的差别总结
2020/09/07 Python
Django model class Meta原理解析
2020/11/14 Python
小女主人连衣裙:Little Mistress
2017/07/10 全球购物
亲戚结婚的请假条
2014/02/11 职场文书
三严三实心得体会范文
2014/10/13 职场文书
小学优秀教师材料
2014/12/15 职场文书
2016元旦主持人开场白
2015/12/03 职场文书
创业计划书之酒店
2019/08/30 职场文书
多表查询、事务、DCL
2021/04/05 MySQL
解决MultipartFile.transferTo(dest) 报FileNotFoundExcep的问题
2021/07/01 Java/Android
日本十大血腥动漫,那些被禁播的动漫盘点
2022/03/21 日漫