不推荐使用grid布局,不清楚为什么左边一列的不会自适应,换成flex布局就可以了
主要方法借助中的getInstanceByDom方法
完整代码:
- <template>
- <div class="statis">
- <div class="content" >
- <!-- v-for 遍历父级div-->
- <div class="main" v-for="(item,index) in echartsData" :key="index">
- <!--自定义宽高的dom,用于放置图表-->
- <div class="bar"></div>
- <img class="title-bg" src="@/assets/img/title-bg.png"/>
- </div>
- </div>
- </div>
- </template>
- <script>
- import elementResizeDetectorMaker from "element-resize-detector";
-
- export default {
- name: "test",
- data() {
- return {
- observer: null,
- titleIcon:require('@/assets/img/title-bg.png'),
- echartsData: [
- {
- title:'标题1换个环境官方',
- data: [
- { value: 20, name: '数据1' },
- { value: 300, name: '数据2' },
- { value: 300, name: '数据3' }
- ],
- },
- {
- title:'环境官方',
- data: [
- { value: 20, name: '数据1' },
- { value: 300, name: '数据2' }
- ],
- },
- {
- title:'官方',
- data: [
- { value: 20, name: '数据1'},
- { value: 300, name: '数据2'}
- ],
- },
- {
- title:'标题1换个环境官方',
- data: [
- { value: 20, name: '数据1'},
- { value: 300, name: '公共 部分' }
- ],
- }
- ],
- color: ['#5B8FF9', '#ca2df5', '#42CE92', '#f96950', '#047ff5'],//颜色列表
- }
- },
- methods: {
- // 方法:绘制柱状图
- drawBar() {
- var myEchart = document.getElementsByClassName('bar'); //获取类名
- //此处for循环多次初始化 echarts 实例
- for (var i = 0; i < myEchart.length; i++) {
- var myChart = this.$echarts.init(myEchart[i]) //初始化echarts实例要在for循环内
- if(myChart){
- let option = {
- title: {
- text: this.echartsData[i].title,
- left: 40,
- top:'20',
- textStyle: {
- color:'#383838',
- fontSize: 16,
- }
- },
- tooltip: {
- trigger: 'item'
- },
- legend: {
- top: '50',
- left: 'center'
- },
- series: [
- {
- type: 'pie',
- radius: ['40%', '55%'],
- center: ['50%', '60%'], // 调整饼图位置
- data: this.echartsData[i].data,
- itemStyle:{
- normal:{
- label:{
- show: true,
- formatter: '{b} : {c} ({d}%)'
- },
- labelLine :{show:true},
- color: function (colors) {
- var colorList = [
- '#73DEB3',
- '#578EF8',
- '#9A60B4',
- '#ef6567',
- '#f9c956',
- '#3BA272'
- ];
- return colorList[colors.dataIndex];
- }
- }
- }
- }]
- }
- //使用刚指定的配置项和数据显示图表
- myChart.setOption(option)
- // window.addEventListener("resize", () => {
- // myChart.resize();
- // })
-
- }
- // const echartAll = document.getElementsByClassName('bar')
- // window.onresize = function() {
- // for (let i = 0; i < echartAll.length; i++) {
- // var myChart = this.$echarts.init(echartAll[i])
- // myChart.resize()
- // }
- // }
- }
- },
-
- // 处理多个图形的自适应
- getEchartObj() {
- var myEchart = document.getElementsByClassName('bar'); //获取类名
- for (var i = 0; i < myEchart.length; i++){
- console.log('myEchart[i]',myEchart[i]);
- let _ref= myEchart[i];//遍历生成的折线图的Dom
- let myEchars = _ref?this.$echarts.getInstanceByDom(_ref):undefined;
- if(myEchars!== undefined){
- myEchars.resize();
- }
- }
- },
-
- },
- mounted() {
- //调用绘制柱状图的方法
- this.$nextTick(()=>{
- this.drawBar()
-
- })
-
- this.$nextTick(()=>{
- window.onresize = ()=>{
- this.getEchartObj()
- }
- })
-
- }
- }
- </script>
-
- <style scoped>
- .content {
- display: flex;
- /* grid-template-columns: 1fr 1fr 1fr; */
- gap: 20px;
- flex-wrap: wrap;
- }
-
- .main {
- width:calc((100% - 46px)/3);
- border: 1px solid #D0D0D0;
- height: 360px;
- background-color: #FFFFFF;
- position: relative;
- }
- .title-bg{
- position:absolute;
- top:23px;
- left:20px;
- }
- .main .bar {
- width: 100%;
- height: 100%;
- }
- </style>