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);