let data = 100;
let rate = '♥♥♥♥♥';
option = {
//backgroundColor: 'transparent',
backgroundColor: '#00111b',
// 标题:【0】指数显示,【1】数值显示
title: [{
text: '身心能量指数\n' + rate,
x: 'center',
top: '54%',
textStyle: {
color: '#be8c3c',
fontSize: 20,
fontWeight: '100',
}
}, {
text: data,
x: 'center',
top: '43%',
textStyle: {
fontSize: '90',
color: '#be8c3c',
fontFamily: 'SimHei',
fontStyle: 'oblique',
foontWeight: '500',
},
}],
// 极坐标系
polar: {
radius: ['24%', '30%'],
center: ['50%', '50%'],
},
// 极坐标系:角度轴
angleAxis: {
max: 100 * 360 / 270,
show: false,
type: 'value',
startAngle: 225
},
// 极坐标系:径向轴
radiusAxis: {
type: 'category',
show: true,
axisLabel: {
show: false,
},
axisLine: {
show: false,
},
axisTick: {
show: false
},
},
series: [
// 第二层:数据以进度条的形式展示
{
type: 'bar',
data: [{
value: data
}],
itemStyle: {
color: function() {
let obj = {
type: 'linear',
x: 0, //右
y: 0.5, //下
x2: 1, //左
y2: 0, //上
colorStops: [{
offset: 0,
color: '#8ac4d4'
}, {
offset: 1,
color: '#ec5e26'
}]
};
if (data >= 0 && data < 20) {
obj.colorStops[1].color = '#8ac4d4';
} else if (data >= 20 && data < 40) {
obj.y = 0.3;
obj.x2 = 2;
} else if (data >= 40 && data < 60) {
obj.y = 0.3;
obj.x2 = 1.5;
} else if (data >= 60 && data < 80) {
obj.y = 0.4;
obj.x2 = 1.1;
}
return obj;
}
},
barGap: '-100%',
coordinateSystem: 'polar',
roundCap: true,
cursor: 'auto',
z: 2
},
// 第二层:进度条背景
{
type: 'bar',
data: [{
value: 100,
}],
itemStyle: {
color: '#013f72'
},
barGap: '-100%',
coordinateSystem: 'polar',
roundCap: true,
cursor: 'auto',
emphasis: {
itemStyle: {
color: '#013f72'
}
},
z: 1
},
// 第一层:中心文字展示区
{
type: 'pie',
radius: ['0%', '22%'],
hoverAnimation: false,
center: ['50%', '50%'],
cursor: 'auto',
itemStyle: {
normal: {
labelLine: {
show: false
},
color: {
type: 'radial',
x: 0.5,
y: 0.5,
r: 0.5,
colorStops: [{
offset: 0,
color: '#174869'
}, {
offset: 1,
color: '#08385c'
}]
}
}
},
data: [{
value: 100
}],
z: 2
},
// 第三层;仪表盘:只显示刻度
{
type: 'gauge',
radius: '35%',
startAngle: '225',
endAngle: '-45',
splitNumber: 10,
center: ['50%', '50%'],
min: 0,
max: 100,
pointer: {
show: false
},
title: {
show: false
},
detail: {
show: false
},
data: [{
value: 100,
name: ''
}],
axisLine: {
lineStyle: {
width: 20,
color: [
[0, '#5fa7ca'],
[1, '#5fa7ca']
],
opacity: 0
}
},
axisTick: {
length: 14,
lineStyle: {
color: 'auto'
}
},
splitLine: {
show: false
},
axisLabel: {
show: true,
distance: 18, //距离刻度的距离
lineHeight: -50,
formatter: function(value) {
return value % 100 === 0 ? value : '';
}
}
},
// 第四层;背景圆:带阴影
{
type: 'pie',
radius: ['0%', '40%'],
hoverAnimation: false,
center: ['50%', '50%'],
cursor: 'auto',
itemStyle: {
color: {
type: 'radial',
x: 0.5,
y: 0.5,
r: 0.5,
colorStops: [{
offset: 0,
color: '#002e50'
}, {
offset: 0.9,
color: '#002e50'
}, {
offset: 1,
color: '#134568'
}]
}
},
data: [{
value: 100
}],
labelLine: {
show: false
},
z: -1
},
// 第五层:视觉上类似于边框,带阴影
{
type: 'pie',
radius: ['0', '40.4%'],
hoverAnimation: false,
center: ['50%', '50%'],
cursor: 'auto',
itemStyle: {
color: '#146a90',
shadowBlur: 50,
shadowColor: '#146a90'
},
data: [{
value: 100
}],
labelLine: {
show: false
},
emphasis: {
itemStyle: {
color: '#146a90'
}
},
z: -2
},
// 第六层:看着类似一个边框,不细看,看不出来,此项目的在于突出立体感
{
type: 'pie',
radius: ['46.7%', '47%'],
hoverAnimation: false,
center: ['50%', '50%'],
cursor: 'auto',
itemStyle: {
color: '#07223b',
},
data: [{
value: 100
}],
labelLine: {
show: false
},
emphasis: {
itemStyle: {
color: '#07223b'
}
},
z: -2
},
// 第七层:
{
type: 'pie',
radius: ['47%', '54%'],
hoverAnimation: false,
center: ['50%', '50%'],
cursor: 'auto',
itemStyle: {
color: '#00182d',
},
data: [{
value: 100
}],
labelLine: {
show: false
},
emphasis: {
itemStyle: {
color: '#00182d'
}
},
z: -2
},
// 第八层:
{
type: 'pie',
radius: ['54%', '60%'],
hoverAnimation: false,
center: ['50%', '50%'],
cursor: 'auto',
itemStyle: {
color: '#011422',
},
data: [{
value: 100
}],
labelLine: {
show: false
},
emphasis: {
itemStyle: {
color: '#011422'
}
},
z: -2
},
]
};
// 随机数据
function numb() {
data = Math.floor(Math.random() * 100);
if (data >= 0 && data < 20) {
rate = '♡♡♡♡♡';
} else if (data >= 20 && data < 40) {
rate = '♥♡♡♡♡';
} else if (data >= 40 && data < 60) {
rate = '♥♥♡♡♡';
} else if (data >= 60 && data < 80) {
rate = '♥♥♥♡♡';
} else if (data >= 80 && data <= 100) {
rate = '♥♥♥♥♡';
} else {
rate = '♥♥♥♥♥';
}
option.title[0].text = '身心能量指数\n' + rate;
option.title[1].text = data;
option.series[0].data[0].value = data;
myChart.setOption(option, true);
}
setInterval(function() {
numb();
}, 1000);