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 广告后加载,加载完页面再加载广告
Nov 25 Javascript
javascript 实现简单的table排序及table操作练习
Dec 28 Javascript
使用js判断TextBox控件值改变然后出发事件
Mar 07 Javascript
jQuery调用ajax请求的常见方法汇总
Mar 24 Javascript
详解AngularJS中自定义指令的使用
Jun 17 Javascript
折叠菜单及选择器的运用
Feb 03 Javascript
从零开始做一个pagination分页组件
Mar 15 Javascript
解决vue项目刷新后,导航菜单高亮显示的位置不对问题
Nov 01 Javascript
解决vue项目F5刷新mounted里的函数不执行问题
Nov 05 Javascript
Vue实现商品飞入购物车效果(电商项目)
Nov 26 Javascript
Ant Design的Table组件去除
Oct 24 Javascript
微信小程序scroll-view不能左右滑动问题的解决方法
Jul 09 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
《心理测量者3》剧场版动画预告
2020/03/02 日漫
新的一年,新的期待:DC在2020年的四部动画电影
2020/01/01 欧美动漫
PHP 输出缓存详解
2009/06/20 PHP
php入门学习知识点四 PHP正则表达式基本应用
2011/07/14 PHP
简单的php写入数据库类代码分享
2011/07/26 PHP
微信公众平台开发实现2048游戏的方法
2015/04/15 PHP
Extjs ajax同步请求时post方式参数发送方式
2009/08/05 Javascript
javascrip关于继承的小例子
2013/05/10 Javascript
一个简单的弹性返回顶部JS代码实现介绍
2013/06/09 Javascript
用jQuery获取IE9下拉框默认值问题探讨
2013/07/22 Javascript
Jquery原生态实现表格header头随滚动条滚动而滚动
2014/03/18 Javascript
Javascript表单验证要注意的事项
2014/09/29 Javascript
js+canvas简单绘制圆圈的方法
2016/01/28 Javascript
D3.js实现散点图和气泡图的方法详解
2016/09/21 Javascript
VueJs与ReactJS和AngularJS的异同点
2016/12/12 Javascript
bootstrap中模态框、模态框的属性实例详解
2017/02/17 Javascript
NodeJs中express框架的send()方法简介
2017/06/20 NodeJs
基于three.js编写的一个项目类示例代码
2018/01/05 Javascript
vue中前进刷新、后退缓存用户浏览数据和浏览位置的实例讲解
2018/09/21 Javascript
javascript防抖函数debounce详解
2019/06/11 Javascript
详解JavaScript修改注册表的方法
2020/01/05 Javascript
python字符串对其居中显示的方法
2015/07/11 Python
Python之Scrapy爬虫框架安装及简单使用详解
2017/12/22 Python
flask框架视图函数用法示例
2018/07/19 Python
PyCharm代码提示忽略大小写设置方法
2018/10/28 Python
对Python正则匹配IP、Url、Mail的方法详解
2018/12/25 Python
python利用ffmpeg进行录制屏幕的方法
2019/01/10 Python
Python标准库使用OrderedDict类的实例讲解
2019/02/14 Python
Jacobi迭代算法的Python实现详解
2019/06/29 Python
python cv2在验证码识别中应用实例解析
2019/12/25 Python
PyTorch实现AlexNet示例
2020/01/14 Python
CSS3实现各种图形的示例代码
2016/10/19 HTML / CSS
韩国流行时尚女装网站:Dintchina(中文)
2018/07/19 全球购物
暑期培训随笔感言
2014/03/10 职场文书
六一儿童节开幕词
2015/01/29 职场文书
企业宣传语大全
2015/07/13 职场文书