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阻止scroll事件多次执行的思路及实现
Nov 08 Javascript
从数组中随机取x条不重复数据的JS代码
Dec 24 Javascript
JavaScript实现拖拽网页内元素的方法
Apr 15 Javascript
JavaScript中的slice()方法使用详解
Jun 06 Javascript
javascript实现将文件保存到本地方法汇总
Jul 26 Javascript
Ionic实现仿通讯录点击滑动及$ionicscrolldelegate使用分析
Jan 18 Javascript
Angular 数据请求的实现方法
May 07 Javascript
vue项目打包之后背景样式丢失的解决方案
Jan 17 Javascript
Vue 用Vant实现时间选择器的示例代码
Oct 25 Javascript
基于javascript实现贪吃蛇经典小游戏
Apr 10 Javascript
JavaScript canvas实现文字时钟
Jan 10 Javascript
JavaScript ES6的函数拓展
Jan 18 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 文件上传全攻略
2010/04/28 PHP
php.ini-dist 和 php.ini-recommended 的区别介绍(方便开发与安全的朋友)
2012/07/01 PHP
PHP数据库连接mysql与mysqli对比分析
2016/01/04 PHP
PHP根据key删除数组中指定的元素
2019/02/28 PHP
ThinkPHP5.1验证码功能实现的示例代码
2020/06/08 PHP
JavaScript 实现??打印?理
2007/04/28 Javascript
简明json介绍
2008/09/28 Javascript
IE 下的只读 innerHTML
2009/08/21 Javascript
javascript表单验证使用示例(javascript验证邮箱)
2014/01/07 Javascript
选择复选框按钮置灰否则按钮可用
2014/05/22 Javascript
node.js中的path.dirname方法使用说明
2014/12/09 Javascript
js+cookies实现悬浮购物车的方法
2015/05/25 Javascript
JavaScript中的Array 对象(数组对象)
2016/06/02 Javascript
详解微信小程序 wx.uploadFile 的编码坑
2017/01/23 Javascript
vue.js项目打包上线的图文教程
2017/11/16 Javascript
vue 系列——vue2-webpack2框架搭建踩坑之路
2017/12/22 Javascript
通过vue写一个瀑布流插件代码实例
2019/09/07 Javascript
Openlayers学习之地图比例尺控件
2020/09/28 Javascript
微信小程序实现购物车功能
2020/11/18 Javascript
[00:52]DOTA2第二届亚洲邀请赛预选赛宣传片
2017/01/13 DOTA
Python解析网页源代码中的115网盘链接实例
2014/09/30 Python
python中文编码与json中文输出问题详解
2018/08/24 Python
Django csrf 两种方法设置form的实例
2019/02/03 Python
python创造虚拟环境方法总结
2019/03/04 Python
Python 元组操作总结
2019/09/18 Python
python3.7将代码打包成exe程序并添加图标的方法
2019/10/11 Python
公认8个效率最高的爬虫框架
2020/07/28 Python
python自动化发送邮件实例讲解
2021/01/04 Python
解锁canvas导出图片跨域的N种姿势小结
2019/01/24 HTML / CSS
电气专业推荐信范文
2013/11/18 职场文书
工商企业管理实习自我鉴定
2013/12/04 职场文书
美术教师自我鉴定
2014/02/12 职场文书
2014年单位工作总结范文
2014/11/27 职场文书
2015年团支书工作总结
2015/04/03 职场文书
2015年幼儿园大班工作总结
2015/04/25 职场文书
小学生读书笔记范文
2015/06/30 职场文书