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 相关文章推荐
jQuery数据显示插件整合实现代码
Oct 24 Javascript
javascript实现单击和双击并存的方法
Dec 13 Javascript
js使用split函数按照多个字符对字符串进行分割的方法
Mar 20 Javascript
JavaScript+CSS实现仿Mootools竖排弹性动画菜单效果
Oct 14 Javascript
微信小程序本作用域下调用全局JS详解及实例
Feb 22 Javascript
javascript实现table单元格点击展开隐藏效果(实例代码)
Apr 10 Javascript
jquery实现图片上传前本地预览
Apr 28 jQuery
jQuery实现点击DIV同时点击CheckBox,并为DIV上背景色的实例
Dec 18 jQuery
详解如何实现一个简单的 vuex
Feb 10 Javascript
微信小程序中添加客服按钮contact-button功能
Apr 27 Javascript
微信小程序实现收藏与取消收藏切换图片功能
Aug 03 Javascript
React注册倒计时功能的实现
Sep 06 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,不用COM,生成excel文件
2006/10/09 PHP
fleaphp crud操作之find函数的使用方法
2011/04/23 PHP
解析php中static,const与define的使用区别
2013/06/18 PHP
浅析get与post的一些特殊情况
2014/07/28 PHP
详谈symfony window下的安装 安装时候出现的问题以及解决方法
2017/09/28 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
js控制框架刷新
2008/08/01 Javascript
预加载css或javascript的js代码
2010/04/23 Javascript
JS、DOM和JQuery之间的关系示例分析
2014/04/09 Javascript
JavaScript遍历求解数独问题的主要思路小结
2016/06/12 Javascript
jquery代码规范让代码越来越好看
2017/02/03 Javascript
详解Angular2中Input和Output用法及示例
2017/05/21 Javascript
使用JS实现气泡跟随鼠标移动的动画效果
2017/09/16 Javascript
element-ui的回调函数Events的用法详解
2018/10/16 Javascript
RxJS的入门指引和初步应用
2019/06/15 Javascript
亲自动手实现vue日历控件
2019/06/26 Javascript
微信小程序防止多次点击跳转(函数节流)
2019/09/19 Javascript
vue实现路由监听和参数监听
2019/10/29 Javascript
Vue文本模糊匹配功能如何实现
2020/07/30 Javascript
python基于BeautifulSoup实现抓取网页指定内容的方法
2015/07/09 Python
详解pandas数据合并与重塑(pd.concat篇)
2019/07/09 Python
Python实现一个数组除以一个数的例子
2019/07/20 Python
Pytorch之卷积层的使用详解
2019/12/31 Python
Python list运算操作代码实例解析
2020/01/20 Python
Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作
2020/06/06 Python
Keras 实现加载预训练模型并冻结网络的层
2020/06/15 Python
用python进行视频剪辑
2020/11/02 Python
Urban Outfitters德国官网:美国跨国生活方式零售公司
2018/05/21 全球购物
办公室助理岗位职责
2013/12/25 职场文书
《胖乎乎的小手》教学反思
2014/02/26 职场文书
解放思想大讨论活动心得体会
2014/09/11 职场文书
安全生产警示教育活动总结
2015/05/09 职场文书
乡镇科协工作总结2015
2015/05/19 职场文书
2015人事行政工作总结范文
2015/05/21 职场文书
律政俏佳人观后感
2015/06/09 职场文书
教你利用python实现企业微信发送消息
2021/05/23 Python