vue实现多个echarts根据屏幕大小变化而变化实例


Posted in Javascript onJuly 19, 2020

前言

有如下页面需求:在一个页面展示多个echarts图表,并且根据屏幕大小变化而变化。

vue实现多个echarts根据屏幕大小变化而变化实例

实例

可以封装成组件使用,以增加代码复用性

// myCharts.vue
 <template>
 <div class="charts-comps" ref="charts"></div>
</template>

<script>
import echarts from 'echarts'
export default {
 name: 'myCharts',
 props: {
 type: {
  type: String,
  default: ''
 }
 },
 data () {
 return {
  resizeTimer: null,
  myChart: null
 }
 },
 methods : {
 init () {
  let myChart = echarts.init(this.$refs.charts);
  this.myChart = myChart;
  myChart.setOption({
	 xAxis: {
  type: 'category',
  boundaryGap: false,
  data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
	 },
	 yAxis: {
	  type: 'value'
	 },
	 series: [{
	  data: [820, 932, 901, 934, 1290, 1330, 1320],
	  type: 'line',
	  areaStyle: {}
	 }]
	 });
 }
 }
 mounted () {
 this.init(); // 初始化图表
 let _this = this;
 window.addEventListener('resize', function () { 
  if (_this.resizeTimer) clearTimeout(_this.resizeTimer);
  _this.resizeTimer = setTimeout(function () {
  _this.myChart.resize();
  }, 100)
 })
 }
}
</script>

<style lang="less" scoped>
 .charts-comps{
 width: 100%;
 height: 100%;
 }
</style>

这样就可以在需要用到的地方使用了

// index.vue
<template>
 <my-charts class="charts-comps" ref="charts" v-for="item in dataList" :key="item"></my-charts>
</template>

<script>
import myCharts from './myCharts'
export default {
 name: 'test',
 components: {myCharts},
 data () {
 return {
 dataList: ['test1','test2','test3','test4']
 }
 }
 }
 </script>

关键代码解析

let _this = this;
window.addEventListener('resize', function () { 
 ...
})

在myCharts组件中去监听窗口大小变化,这样可以针对每一个图表很方便的resize()重绘图表(Echarts.resize()是echarts的对图表进行重新绘制的方法)。这里使用window.addEventListener而不使用window.onresize的原因是:window.onresize绘覆盖掉前面定义的方法,而只执行最后一个,导致图表只有最后一个重绘了,而window.addEventListener避免了这个问题。

if (_this.resizeTimer) clearTimeout(_this.resizeTimer);
_this.resizeTimer = setTimeout(function () {
 _this.myChart.resize();
}, 100)

结合 函数防抖(debounce) 避免在窗口大小变化时频繁的进行图表的resize()。在处理复杂的function时可以很大限度的提高性能。实现原理就是对要执行的目标方法延时处理,设置一个定时器,当再次执行相同方法时(窗口大小变化时会被频繁的侦听到onresize),若前一个定时任务还未执行完,则清除掉定时任务,重新定时。这样当屏幕大小在100毫秒之内没有再次变化时才会对Echarts进行resize(),当然时间段可以根据自身需要设置长一点。

补充知识:vue+echarts 同页面多个echarts图表,明明宽度设置的都是100%,却只有第一个生效以及如何实现自适应

问题描述

三个echarts图表,明明宽度设置的都是100%,却只有第一个生效以及如何实现自适应

vue实现多个echarts根据屏幕大小变化而变化实例

解决办法

1.初始化时需要加上,确保操作的是最新的DOM

this.$nextTick(_ => {  
   
});

2.echarts图表自适应实现,需要在渲染图表后加上

window.addEventListener("resize", function() {        
 myChart.resize();      
});

完整如下:

vue实现多个echarts根据屏幕大小变化而变化实例

以上这篇vue实现多个echarts根据屏幕大小变化而变化实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
ext form 表单提交数据的方法小结
Aug 08 Javascript
体验js中splice()的强大(插入、删除或替换数组的元素)
Jan 16 Javascript
js 获取class的元素的方法 以及创建方法getElementsByClassName
Mar 11 Javascript
js判断IE浏览器版本过低示例代码
Nov 22 Javascript
10条建议帮助你创建更好的jQuery插件
May 18 Javascript
JavaScript中toString()方法的使用详解
Jun 05 Javascript
Seajs 简易文档 提供简单、极致的模块化开发体验
Apr 13 Javascript
JavaScript仿淘宝页面图片滚动加载及刷新回顶部的方法解析
May 24 Javascript
Angular表格神器ui-grid应用详解
Sep 29 Javascript
Angular6封装http请求的步骤详解
Aug 13 Javascript
聊聊Vue 中 title 的动态修改问题
Jun 11 Javascript
jQuery实现简单日历效果
Jul 05 jQuery
解决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
JS中的变量作用域(console版)
Jul 18 #Javascript
js里面的变量范围分享
Jul 18 #Javascript
You might like
PHP 动态随机生成验证码类代码
2010/04/09 PHP
php foreach正序倒序输出示例代码
2014/07/01 PHP
关闭ie窗口清除Session的解决方法
2014/01/10 Javascript
js获取日期:昨天今天和明天、后天
2014/06/11 Javascript
js数组的操作指南
2014/12/28 Javascript
JavaScript实现打字效果的方法
2015/07/10 Javascript
JavaScript的jQuery库中function的存在和参数问题
2015/08/13 Javascript
Bootstrap表单使用方法详解
2017/02/17 Javascript
详解JavaScript对象的深浅复制
2017/03/30 Javascript
JavaScript对JSON数据进行排序和搜索
2017/07/24 Javascript
关于JavaScript的单双引号嵌套问题
2017/08/20 Javascript
JS一个简单的注册页面实例
2017/09/05 Javascript
jquery获取transform里的值实现方法
2017/12/12 jQuery
Webpack按需加载打包chunk命名的方法
2019/09/22 Javascript
VUE实现自身整体组件销毁的示例代码
2020/01/13 Javascript
使用 Jest 和 Supertest 进行接口端点测试实例详解
2020/04/25 Javascript
python操作excel的包(openpyxl、xlsxwriter)
2018/06/11 Python
python3调用百度翻译API实现实时翻译
2018/08/16 Python
Python开发虚拟环境使用virtualenvwrapper的搭建步骤教程图解
2018/09/19 Python
使用python判断你是青少年还是老年人
2018/11/29 Python
对python中的six.moves模块的下载函数urlretrieve详解
2018/12/19 Python
Python操作SQLite数据库过程解析
2019/09/02 Python
python爬取王者荣耀全皮肤的简单实现代码
2020/01/31 Python
如何通过Python3和ssl实现加密通信功能
2020/05/09 Python
Python中用xlwt制作表格实例讲解
2020/11/05 Python
Python 利用flask搭建一个共享服务器的步骤
2020/12/05 Python
python 调用Google翻译接口的方法
2020/12/09 Python
python推导式的使用方法实例
2021/02/28 Python
好药师网上药店:安全合法的网上药品零售药房
2017/02/15 全球购物
应聘护士自荐信
2013/10/21 职场文书
信息系统专业个人求职信范文
2013/12/07 职场文书
新年抽奖获奖感言
2014/03/02 职场文书
李开复演讲稿
2014/05/24 职场文书
2019年大学毕业生个人自我鉴定范文大全
2019/03/21 职场文书
关于感恩的素材句子(38句)
2019/11/11 职场文书
python实现一个简单的贪吃蛇游戏附代码
2022/06/28 Python