配置项如下
const hexToRgba = (hex, opacity) => {
let rgbaColor = "";
let reg = /^#[\da-f]{6}$/i;
if (reg.test(hex)) {
rgbaColor = `rgba(${parseInt("0x" + hex.slice(1, 3))},${parseInt(
"0x" + hex.slice(3, 5)
)},${parseInt("0x" + hex.slice(5, 7))},${opacity})`;
}
return rgbaColor;
};
let img1 = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAXVBMVEUAAAD/V1z/WmH+U2D/U2H9U1/9UmD9U1/9U2D+U2D8U2H8UmD/U1//U1/9U2D9UmD9U2D9U2H8U2D/U2D/U2D9U1/+U2D9U2D8U2D9U1/9U2D8VGD9U2D7UWD9U2BFqrbVAAAAHnRSTlMADwe0FvTs5tW+YFwvIfnMmWxOOyfcq3jEoo1VkEXX0nxvAAAAz0lEQVQ4y62SV47DMAwFnylZsop7S9nN/Y+5CyUO5JApH5nfGRAgQXyHwlwELGFjuohobNTvAi0H9G5C2PxgGsmbqrv6aMaDFKiiPafguKKTghPCkgI3wEvBGV6l4PSDWt7S9dcdTETF/QFhJiSCnVYe9L824oa3gS1a9mbEncGWLJgjMrRiV9DY0++9B2PJ/QJO4bL5BAE6br4jyIzuf5lSjXgOVS3hJa177XXV1s9HTJ1NN1SD7NcmeybB+92huX94iYkHc+6byAMqcvAxf4WbMyOLT6AEAAAAAElFTkSuQmCC';
let img2 = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAXVBMVEUAAAD/liv/mib/lyr/lir/lir/liv/liv/lir/lSz/liv/lir/liv/lyr/lyr/lyr/lin/lSv/liv/lir/liv/lir/liv/liv/lir/mir/liv/lir/mCv/mCz/litdJRI5AAAAHnRSTlMAEAletfjlv00g8+rb1JpsOyzuzLGrjngmGMeiMkUnrw9tAAAAz0lEQVQ4y62SVxKDMAwFnwsYQu813P+YYSCAQYL8ZD/ZHTHSGP9BBBODK/egnVi6PfD5QBy/4AP5a4LavJc7nA/CePVjkPZcoEWxzhgaxFxQQ1VLYDwoLpg/l0tQ1/D5LU2y7pBniKg3UOF3UeW2DQ2Sd5ABW6HIoq8kT7HjuS8ShBksOn0NSoEzyfXMhMr2FSjSHF5LcMWw+ViCJ9Xzto5OcY+MColHevPsu6jw70e0sbvcUHu8bxzrMTFenQ5N/eVJZDQIT8FIAyks2E14PgzBMyGqhA9eAAAAAElFTkSuQmCC';
let img3 = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAY1BMVEUAAAD/pwD/pQD/qgD/qgD/qgD/qgD/qgD/qgD/qgD/qgD/qgD/qgD/qgD/qgD/qgD/qgD/qgD/qgD/qwD/qgD/qgD/qgD/qgD/qgD/rAD/rAD/qgD/qgD/qwD/qgD/qQD/qgBqA1+YAAAAIHRSTlMAEQe2YFrt59UgDffzzL6ZbE4+F9yxrI54LinjxKI2JXCWl8AAAADRSURBVDjLrZJXDoMwEAUftrHpvZfA/U+ZiCaDF5KPzO+MLO9q8R88ORP07AimmSQ/ApcOrCOw6IB9e8HefSp9yksnXn2rsoEKuBeub4wNYiqoYVdLEKUQ9BdEuQR1Tf8yR5SsM8gWjukHiGIb1O6nxgySTHXYEMo2Bg0SmeEgVYERFC00cn4NSgtnkrMXMKh0X1FXE2lbZiBg4+5jBpqMf6b1+Qv3MCdkeCSMnn3uhO79E12slh3ylPaNfkyEF6dFm/5yEp0ZFKeA2AWzNDz8zBuAhDcYjYRmwwAAAABJRU5ErkJggg==';
// 数据整理
let xData = ['类别1', '类别2', '类别3', '类别4', '类别5', '类别6', '类别7', '类别8'];
let yData = [4757, 3254, 2454, 2011, 1654, 1211, 1211, 254];
let max = Math.max(...yData);
let labelColor = ['#FD5360', '#FF962B', '#FFAA00']
let emptyData = yData.map((v, i) => {
let color = i > 2 ? '#1890FF' : labelColor[i];
let item = {
value: max,
label: {
formatter: '{a|' + v + '}',
position: 'right',
distance: 20,
rich: {
a: {
color: color,
borderColor: color,
borderWidth: 1,
borderType: 'dashed',
padding: [0, 0, 2, 0],
width: 60,
height: 18,
align: 'center',
verticalAlign: 'middle',
backgroundColor: hexToRgba(color, 0.05)
}
}
}
}
return item
})
let xDataFormat = xData.map((v, i) => {
let color = i > 2 ? '#333333' : '#ffffff';
let bg;
switch (i) {
case 0:
bg = {image: img1};
break;
case 1:
bg = {image: img2};
break;
case 2:
bg = {image: img3};
break;
default:
bg = '#fff';
break;
}
let item = {
value: v,
textStyle: {
rich: {
a: {
color: color,
width: 20,
height: 20,
align: 'center',
verticalAlign: 'middle',
backgroundColor: bg,
borderRadius: 10,
borderColor: hexToRgba(color, 0.2),
borderWidth: 1,
shadowColor: hexToRgba(color, 0.1),
shadowBlur: 5
},
b: {
padding: [0, 5]
},
value: {
color: '#666666'
}
}
}
}
return item
})
xData.reverse();
xDataFormat.reverse();
yData.reverse();
emptyData.reverse();
option = {
backgroundColor: '#fff',
grid: {
top: "5%",
left: "1%",
right: "15%",
bottom: "3%",
containLabel: true
},
xAxis: [{
type: "value",
splitLine: {
show: false
},
max: function(value) {
return value.max
},
axisLine: {
lineStyle: {
color: '#D9D9D9'
}
},
axisLabel: {
color: '#666'
}
}],
yAxis: [{
type: "category",
name: "",
axisTick: {
show: false
},
splitLine: {
show: false
},
axisLine: {
lineStyle: {
color: '#D9D9D9'
}
},
axisLabel: {
formatter: function(value) {
return '{a|' + value.substr(value.length - 1) + '}{b|}{value|' + value + '}'
}
},
data: xDataFormat
}, {
type: "category",
name: "",
axisTick: {
show: false
},
splitLine: {
show: false
},
axisLabel: {
show: false
},
axisLine: {
show: false
},
data: xData
}],
series: [{
type: 'bar',
barWidth: 10,
yAxisIndex: 1,
itemStyle: {
normal: {
barBorderRadius: [0, 6, 6, 0],
color: 'rgba(225,225,225,0.4)'
}
},
label: {
show: true,
position: 'right',
formatter: function(a) {
console.log(a)
}
},
data: emptyData
},
{
type: 'bar',
barWidth: 10,
zlevel: 1,
itemStyle: {
normal: {
barBorderRadius: [0, 6, 6, 0],
color: new echarts.graphic.LinearGradient(0, 0, 1, 1, [{
offset: 0,
color: '#3D9FFF'
}, {
offset: 1,
color: '#41D7F3'
}], false)
}
},
data: yData
}
]
};