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 相关文章推荐
JAVASCRIPT下判断IE与FF的比较简单的方式
Oct 17 Javascript
网站导致浏览器崩溃的原因总结(多款浏览器) 推荐
Apr 15 Javascript
Javascript学习笔记 delete运算符
Sep 13 Javascript
jQuery分别获取选中的复选框值的示例
Jun 17 Javascript
javascript抽象工厂模式详细说明
Dec 16 Javascript
javascript表单验证大全
Aug 12 Javascript
Bootstrap表格和栅格分页实例详解
May 20 Javascript
AngularJS框架的ng-app指令与自动加载实现方法分析
Jan 04 Javascript
打字效果动画的4种实现方法(超简单)
Oct 18 Javascript
vue+echarts实现可拖动节点的折线图(支持拖动方向和上下限的设置)
Apr 12 Javascript
jquery实现动态创建form并提交的方法示例
May 27 jQuery
微信小程序 弹窗输入组件的实现解析
Aug 12 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
JS中的变量作用域(console版)
Jul 18 #Javascript
js里面的变量范围分享
Jul 18 #Javascript
You might like
PHP中用接口、抽象类、普通基类实现“面向接口编程”与“耦合方法”简述
2011/03/23 PHP
javascript 面向对象继承
2009/11/26 Javascript
cnblogs TagCloud基于jquery的实现代码
2010/06/11 Javascript
js 通用订单代码
2013/12/23 Javascript
nodejs中转换URL字符串与查询字符串详解
2014/11/26 NodeJs
javascript获取本机操作系统类型的方法
2015/08/13 Javascript
JavaScript中push(),join() 函数 实例详解
2016/09/06 Javascript
node.js学习之base64编码解码
2016/10/21 Javascript
Django1.7+JQuery+Ajax验证用户注册集成小例子
2017/04/08 jQuery
JS中的Replace()传入函数时的用法详解
2017/09/11 Javascript
微信小程序手机号码验证功能的实例代码
2018/08/28 Javascript
微信小程序--特定区域滚动到顶部时固定的方法
2019/04/28 Javascript
让Vue响应Map或Set的变化操作
2020/11/11 Javascript
微信小程序选择图片控件
2021/01/19 Javascript
python实现从网络下载文件并获得文件大小及类型的方法
2015/04/28 Python
Python实现处理管道的方法
2015/06/04 Python
Python3使用requests登录人人影视网站的方法
2016/05/11 Python
在Python程序员面试中被问的最多的10道题
2017/12/05 Python
解决Pycharm中import时无法识别自己写的程序方法
2018/05/18 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
2018/11/01 Python
Python多线程的退出控制实现
2020/08/10 Python
python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解
2020/12/22 Python
css3中background新增的4个新的相关属性用法介绍
2013/09/26 HTML / CSS
HTML5 CSS3实现一个精美VCD包装盒个性幻灯片案例
2014/06/16 HTML / CSS
使用html5 canvas 画时钟代码实例分享
2015/11/11 HTML / CSS
英国奢侈品网站:MatchesFashion
2016/12/16 全球购物
Bergfreunde丹麦:登山装备网上零售商
2017/02/26 全球购物
Bonprix法国:时尚、鞋子、家居
2020/12/29 全球购物
DIY蛋糕店的创业计划书范文
2013/12/26 职场文书
10的分与合教学反思
2014/04/30 职场文书
农林经济管理专业自荐信
2014/09/01 职场文书
单位工作证明格式模板
2014/10/04 职场文书
公司安全管理制度范本
2015/08/05 职场文书
导游词之蜀山胜景瓦屋山
2019/11/29 职场文书
MATLAB 全景图切割及盒图显示的实现步骤
2021/05/14 Python
手把手带你彻底卸载MySQL数据库
2022/06/14 MySQL