vue项目中在同一页面多次引入同一个echarts图表子组件的自适应问题
2019-02-25 11:30
501 查看
原文链接:http://www.cnblogs.com/stella1024/p/10429967.html
在父组件页面引入两次该图表子组件显示的效果:
由于是百分比宽高,所以在窗口发生变化时,需要让图表也跟着自适应,所以才出现了本次讨论的问题啦。
先看下完整的图表子组件代码(在父组件就是直接引入,不需要传参哦):
<template> <div ref="pieDom" style="width: 100%;height: 100%;"></div> </template> <script> export default { data () { return { pieEcharts: "", pieOption: {}, datas: [], hideColor: '#6f76ac' } }, mounted() { this.datas = [ { value: 20, name: "25%" }, { value: 80, name: "75%" } ]; this.pieEcharts = this.$echarts.init( this.$refs.pieDom ); this.setPieOption(); this.setPieEvents(); }, methods: { setPieOption(){ this.pieOption = { color: ['#ff106e', this.hideColor], //环形的分段色值设置 tooltip: { trigger: 'item', position: (point, params, dom, rect, size)=> { return [point[0], point[1]]; }, }, series: [{ type: 'pie', radius: ['60%', '80%'], //内存 、外层 avoidLabelOverlap: false, hoverAnimation: true, hoverOffset: 2, label: { normal: { show: false, //中间的标签 position: 'center', textStyle: { fontSize: '18', fontWeight: 'bold' } }, emphasis: { show: true, textStyle: { fontSize: '20', fontWeight: 'bold' } } }, labelLine: { normal: { show: false } }, selectedOffset: 0, itemStyle: { emphasis: { }, }, data: this.datas }] }; // 渲染图表 this.pieEcharts.setOption( this.pieOption ); }, /** * 设置图表的事件 */ setPieEvents(){ /** * 刷新时默认显示第一条 */ this.pieEcharts.dispatchAction( { type: 'highlight', seriesIndex: 0, dataIndex: 0 } ); /** * 鼠标移入图表时,不为第一条时就取消第一条的高亮效果 */ this.pieEcharts.on('mouseover',(v) => { if(v.dataIndex != 0){ this.pieEcharts.dispatchAction({ type: 'downplay', seriesIndex: 0, dataIndex: 0 }); } }); /** * 鼠标图表时默认显示第一条 */ this.pieEcharts.on('mouseout',(v) => { this.pieEcharts.dispatchAction( { type: 'highlight', seriesIndex: 0, dataIndex: 0 } ); }); // 监听窗口变化 - 只刷新最后一个图表 window.onresize = ()=> { this.pieEcharts.resize(); } // 监听窗口变化 - 多个图表同时刷新 window.addEventListener('resize', ()=> { this.pieEcharts.resize(); }) }, } } </script> <style scoped> </style>
窗口改变时图表自适应代码在最后,这里分别提出来做说明:
1. 只刷新最后一个图表的情况:(第二种情况的代码记得注释!)
// 监听窗口变化 - 只刷新最后一个图表 window.onresize = ()=> { this.pieEcharts.resize(); }
可以看到,只有第二个才发生了变化,而且会自动居中和适应大小
2. 多个图表同时刷新的情况:
// 监听窗口变化 - 多个图表同时刷新 window.addEventListener('resize', ()=> { this.pieEcharts.resize(); })
两个同时变化了哦!
但是为什么两个监听方法会有这样不同的效果呢??? 这个有空的时候再研究。。。知道的朋友可以留言告诉我哦,万分感谢
转载于:https://www.cnblogs.com/stella1024/p/10429967.html
相关文章推荐
- vue项目在同一页面中引入多个echarts图表 ,并实现封装,自适应和动态数据改变
- Vue-cli构建项目, 组件中js代码引入图片路径问题
- vue一个组件引入多个swiper轮播可能引发的分页器数量异常问题
- vue引用vue-ueditor-wrap组件,一个页面要多次渲染UEditor编辑器时,v-mode绑定失效,v-mode值改变编辑器内容不改变解决方式
- 关于vue项目中全局引入一个 .scss文件的问题解决
- 通过iframe引入另外一个项目中的html片段到项目中,解决样式,高度,兼容等问题的策略
- echarts学习总结一个页面存在多个echarts图形,图形自适应窗口大小
- 解决IE11 vue +webpack 项目中数据更新后页面没有刷新的问题
- 关于一个项目中引入子项目的问题
- 解决element-ui中el-menu组件作为vue-router模式在刷新页面后default-active属性与当前路由页面不一致问题的方法
- 解决vue 项目引入字体图标报错、不显示等问题
- iview组件引入vue项目
- 从新建vue项目到引入组件Element流程
- 从新建vue项目到引入组件Element流程
- vue项目建立一个head组件-vue项目初见存储笔记
- vuejs+Echarts页面空白问题
- vue项目中引入svg的问题
- Nginx部署Vue项目以及解决刷新页面404问题
- Vue项目中引入Echarts
- 一个页面多个echarts图表自适应