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实现无刷新动态调用股票信息
Nov 01 Javascript
js跑步算法的实现代码
Dec 04 Javascript
JQuery中DOM事件冒泡实例分析
Jun 13 Javascript
纯js代码实现未知宽高的元素在指定元素中垂直水平居中显示
Sep 12 Javascript
jquery 判断selection range 是否在容器中的简单实例
Aug 02 Javascript
KnockoutJS 3.X API 第四章之表单value绑定
Oct 10 Javascript
用Vue.js实现监听属性的变化
Nov 17 Javascript
vue教程之toast弹框全局调用示例详解
Aug 24 Javascript
js自定义input文件上传样式
Oct 26 Javascript
JS原型与继承操作示例
May 09 Javascript
Vue + Elementui实现多标签页共存的方法
Jun 12 Javascript
Vue设置长时间未操作登录自动到期返回登录页
Jan 22 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下用rmdir实现删除目录的三种方法小结
2008/04/20 PHP
PHP操作XML作为数据库的类
2010/12/19 PHP
php中关于codeigniter的xmlrpc的类在进行数据交换时的类型问题
2011/07/03 PHP
php获得url参数中具有&amp;的值的方法
2014/03/05 PHP
PHP安全的URL字符串base64编码和解码
2014/06/19 PHP
php强制用户转向www域名的方法
2015/06/19 PHP
PHP面试常用算法(推荐)
2016/07/22 PHP
php运行报错Call to undefined function curl_init()的最新解决方法
2016/11/20 PHP
Document对象内容集合(比较全)
2010/09/06 Javascript
javascript学习笔记(十一) 正则表达式介绍
2012/06/20 Javascript
Ext JS 4官方文档之三 -- 类体系概述与实践
2012/12/16 Javascript
各浏览器对document.getElementById等方法的实现差异解析
2013/12/05 Javascript
整理Javascript函数学习笔记
2015/12/01 Javascript
jQuery双向列表选择器select版
2016/11/01 Javascript
Javascript的this用法
2017/01/16 Javascript
js es6系列教程 - 基于new.target属性与es5改造es6的类语法
2017/09/02 Javascript
vue2.x+webpack快速搭建前端项目框架详解
2017/11/30 Javascript
Node中使用ES6语法的基础教程
2018/01/05 Javascript
layui radio点击事件实现input显示和隐藏的例子
2019/09/02 Javascript
Python打印scrapy蜘蛛抓取树结构的方法
2015/04/08 Python
python通过zabbix api获取主机
2018/09/17 Python
PHP统计代码行数的小代码
2019/09/19 Python
Python操作列表常用方法实例小结【创建、遍历、统计、切片等】
2019/10/25 Python
python实现TCP文件传输
2020/03/20 Python
Python Django搭建网站流程图解
2020/06/13 Python
css3和jquery实现自定义checkbox和radiobox组件
2014/04/22 HTML / CSS
HTML5 用动画的表现形式装载图像
2016/03/08 HTML / CSS
用html5的canvas和JavaScript创建一个绘图程序的简单实例
2016/07/06 HTML / CSS
人民教师的自我评价分享
2014/02/21 职场文书
行政管理毕业生自荐信
2014/02/24 职场文书
会计试用期自我评价
2014/09/19 职场文书
党支部三严三实对照检查材料思想汇报
2014/09/29 职场文书
思想作风建设心得体会
2014/10/22 职场文书
医院感染管理制度
2015/08/05 职场文书
《风娃娃》教学反思
2016/02/18 职场文书
2019入党申请书格式和范文
2019/06/25 职场文书