echarts 仪表盘 UI需求是根据值使刻度实现渐变色,比如值是50%,刻度就只渐变50%的数量。剩下的是固定刻度底色。
我自己不会写,我是照着网友的代码写的。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
#wzy {
width: 300px;
height: 300px;
background-color: #999;
}
</style>
</head>
<script src="./js/echarts.js"></script>
<body>
<div id="wzy"></div>
</body>
<script>
let value=100
console.log(value/100);
var myChart = echarts.init(document.getElementById('wzy'));
var option = {
title: { //标题组件
text: value + '%',
x: 'center', //设置标题居中
bottom: 10,
},
series: [{
type: 'gauge',
min:0,
max:100,
startAngle: 180, //开始角度 左侧角度
endAngle: 0, //结束角度 右侧
radius: '80%' ,
// progress: {
// show: true,
// width: 10,
// },
axisLine: { //仪表盘轴线样式
show: true,
lineStyle: {
width: 0,
color:((value/100)<=0.1)?([[value/100, '#04b9f8'],[1, 'rgb(70,100,144)']]):(((value/100)<=0.2)?([[0.1, '#04b9f8'],[value/100,'#53c47a'],[1, 'rgb(70,100,144)']]):[
[0.1, '#04b9f8'],
[0.2,'#53c47a'],
[value/100, '#a2fd09'],
// [0.3, 'red'],
// [0.5, 'orange'],
// [0.7, 'yellow'],
// [0.9, 'purple'],
[1, 'rgb(70,100,144)']
]),
opacity: 1, //盘的颜色变成透明
}
},
axisLabel: {
show: false,
lineStyle: {
width: 20,
color: 'auto'
// color: [[0.8, '#0066FF'], [1, '#E6EBF8']],
// opacity: 0.4, //盘的颜色变成透明
}
},
splitLine: { //分割线样式,是大分割线
show: false,
length: 20,
// 距离线的位置
// distance: 0,
lineStyle: {
color: 'auto',
width: 5,
// color: [[0.8, '#0066FF'], [1, '#E6EBF8']],
opacity: 1,
}
},
// 刻度线
axisTick: {
show: true,
length: 20,
splitNumber: 5, // 每个分割线内的刻度线分为5份
lineStyle: {
color: 'auto',
width: 2,
opacity: 1,
}
},
data: [{
value: value,
}]
}]
};
myChart.setOption(option);
</script>
</html>
当value值超过77时,外层就有一圈颜色。不知道咋回事。
这个问题可能是因为在渐变颜色的设置中,没有设置完全渐变到固定刻度底色,导致仪表盘外层有一圈颜色。
解决方法是在设置渐变颜色的数组中,最后一个元素设置为固定刻度底色。如下:
lineStyle: {
width: 0,
color: [[value/100, '#04b9f8'], [1, 'rgb(70,100,144)']],
opacity: 1, //盘的颜色变成透明
}
这样仪表盘外层就不会有一圈颜色了。
另外建议您使用条件语句的方法来控制颜色的变化。如下:
if(value<=10){
color:[[value/100, '#04b9f8'],[1, 'rgb(70,100,144)']]
}else if(value<=20){
color:[[0.1, '#04b9f8'],[value/100,'#53c47a'],[1, 'rgb(70,100,144)']]
}else{
color:[[0.1, '#04b9f8'],[0.2,'#53c47a'],[value/100, '#a2fd09'],[1, 'rgb(70,100,144)']]
}
这样更加清晰明了。
试试把这里的[[value/100, '#04b9f8'],[1, 'rgb(70,100,144)']] 改成[[value/100, '#04b9f8'],[1, '#04b9f8']]。