同一个界面需要多个echarts并且属于一类图形,多个图形公用同一个option和构建函数,绑定window.onresize后,只有最后一个图形可缩放,其他的都不可以,构建代码如下:
buildPie(domId, titleName, data, customOption = {}) {
var chartDom = document.getElementById(domId);
var myChart = echarts.init(chartDom);
myChart.clear();
var option;
option = {
title: {
text: titleName,
left: 'center',
itemGap: 0,
textStyle: {
fontSize: 12
// fontWeight: 'normal'
}
},
legend: {
top: 'bottom'
},
tooltip: {
trigger: 'item',
position: 'top'
},
series: [
{
type: 'pie',
radius: '55%',
data: data,
top: data.length > 6 ? '-15%' : '0%',
// 设置鼠标放到哪一块扇形上面的时候,扇形样式、阴影
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
},
// 设置值域的那指向线
labelLine: {
normal: {
show: false
}
},
// 设置值域的标签
label: {
normal: {
// 设置标签位置,默认在饼状图外 可选值:'outer' ¦ 'inner(饼状图上)'
position: 'inside',
formatter: customOption.formatter || '{d}%'
}
}
}
]
};
option && myChart.setOption(option);
window.onresize = function () {
myChart.resize();
};
myChart.resize();
return myChart;
},
问题解决办法:一次要将所有的图标都要在onresize里调用下,值得注意的是使用for-each好像不行,目前不知道什么原因,有知道的可以留言。
代码如下:
this.$nextTick(()=>{
var charts = [];
var echartsList = [{}, {}]; // 对象数组
for(var i = 0; i<echartsList.length; i++ ){
let item = chartsList[i];
let mychat = this.build(item.id, item.title, item.data);
charts.push(myChart);
}
window.addEventListener('resize',()=>{
for(var i = 0; i < charts.length; i++){
charts[i].resize();
}
})
})