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 相关文章推荐
让firefox支持IE的一些方法的javascript扩展函数代码
Jan 02 Javascript
javascript 事件查询综合 推荐收藏
Mar 10 Javascript
分析Node.js connect ECONNREFUSED错误
Apr 09 Javascript
JS中批量给元素绑定事件过程中的相关问题使用闭包解决
Apr 15 Javascript
createTextRange()的使用示例含文本框选中部分文字内容
Feb 24 Javascript
开源的javascript项目Kissy介绍
Nov 28 Javascript
详解JavaScript正则表达式中的global属性的使用
Jun 16 Javascript
从零学习node.js之利用express搭建简易论坛(七)
Feb 25 Javascript
详解webpack2+node+react+babel实现热加载(hmr)
Aug 24 Javascript
Vue入门学习笔记【基本概念、对象、过滤器、指令等】
Apr 13 Javascript
vue实现文件上传读取及下载功能
Nov 17 Javascript
vue使用nprogress实现进度条
Dec 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
PHP在线打包下载功能示例
2016/10/15 PHP
php无限级评论嵌套实现代码
2018/04/18 PHP
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
2019/04/16 PHP
用js怎么把&amp;字符换成&quot;&amp;amp:&quot;
2006/10/19 Javascript
JavaScript的漂亮的代码片段
2013/06/05 Javascript
js操作模态窗口及父子窗口间相互传值示例
2014/06/09 Javascript
js闭包实例汇总
2014/11/09 Javascript
javascript随机抽取0-100之间不重复的10个数
2016/02/25 Javascript
解析浏览器端的AJAX缓存机制
2016/06/21 Javascript
JavaScript如何实现图片懒加载(lazyload) 提高用户体验(增强版)
2016/11/30 Javascript
微信小程序 页面之间传参实例详解
2017/01/13 Javascript
jQuery制作图片旋转效果
2017/02/02 Javascript
微信小程序 侧滑删除(左滑删除)
2017/05/23 Javascript
Angular 4.X开发实践中的踩坑小结
2017/07/04 Javascript
原生js获取left值和top值的三种方法
2017/08/02 Javascript
webpack4手动搭建Vue开发环境实现todoList项目的方法
2019/05/16 Javascript
Vue form表单动态添加组件实战案例
2019/09/02 Javascript
解决vue init webpack 下载依赖卡住不动的问题
2020/11/09 Javascript
17个Python小技巧分享
2015/01/23 Python
python交互式图形编程实例(一)
2017/11/17 Python
Python简单实现两个任意字符串乘积的方法示例
2018/04/12 Python
Python之csv文件从MySQL数据库导入导出的方法
2018/06/21 Python
python十进制和二进制的转换方法(含浮点数)
2018/07/07 Python
使用Python抓取豆瓣影评数据的方法
2018/10/17 Python
python判断文件夹内是否存在指定后缀文件的实例
2019/06/10 Python
python-序列解包(对可迭代元素的快速取值方法)
2019/08/24 Python
Python如何实现动态数组
2019/11/02 Python
使用python动态生成波形曲线的实现
2019/12/04 Python
Windows系统下pycharm中的pip换源
2020/02/23 Python
TUMI澳大利亚网站:美国旅行箱包品牌
2017/03/27 全球购物
Kipling意大利官网:世界著名的时尚休闲包袋品牌
2019/06/05 全球购物
Bluebella德国官网:英国性感内衣和睡衣品牌
2019/11/08 全球购物
网络工程系信息安全技术专业大学生求职信
2013/10/22 职场文书
学校四风对照检查材料
2014/08/28 职场文书
2014年艾滋病防治工作总结
2014/12/10 职场文书
检讨书范文
2019/04/16 职场文书