vue实现多个echarts根据屏幕大小变化而变化实例
前言
有如下页面需求在一个页面展示多个echarts图表,并且根据屏幕大小变化而变化。
实例
可以封装成组件使用,以增加代码复用性
// myCharts.vue <template> <div class="charts-ps" 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-ps{ width: 100%; height: 100%; } </style>
这样就可以在需要用到的地方使用了
// index.vue <template> <my-charts class="charts-ps" ref="charts" v-for="item in dataList" :key="item"></my-charts> </template> <script> import myCharts from './myCharts' export default { name: 'test', ponents: {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%,却只有第一个生效以及如何实现自适应
解决办法
1.初始化时需要加上,确保操作的是最新的DOM
this.$nextTick(_ => { });
2.echarts图表自适应实现,需要在渲染图表后加上
window.addEventListener("resize", function() { myChart.resize(); });
完整如下
以上这篇vue实现多个echarts根据屏幕大小变化而变化实例就是长沙网络推广分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持狼蚁SEO。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程