| /* |
| title: Gauge Car |
| category: gauge |
| titleCN: Gauge Car |
| difficulty: 8 |
| */ |
| |
| option = { |
| backgroundColor: '#000', |
| tooltip: { |
| formatter: '{a} <br/>{b} : {c}%' |
| }, |
| toolbox: { |
| feature: { |
| restore: {}, |
| saveAsImage: {} |
| } |
| }, |
| series: [ |
| // left |
| { |
| name: 'gauge 0', |
| type: 'gauge', |
| min: -200, |
| max: 250, |
| startAngle: -30, |
| endAngle: -315, |
| splitNumber: 9, |
| radius: '35%', |
| center: ['21%', '55%'], |
| axisLine: { |
| lineStyle: { |
| color: [ |
| [1, '#AE96A6'] |
| ], |
| } |
| }, |
| splitLine: { |
| show: false |
| }, |
| axisTick: { |
| show: false |
| }, |
| axisLabel: { |
| show: false |
| }, |
| anchor: {}, |
| pointer: { |
| show: false |
| }, |
| detail: { |
| show: false |
| }, |
| title: { |
| fontSize: 12, |
| fontWeight: 800, |
| fontFamily: "Arial", |
| color: '#fff', |
| offsetCenter: [0, '-60%'] |
| }, |
| progress: { |
| show: true, |
| width: 3, |
| itemStyle: { |
| color: '#fff' |
| } |
| }, |
| data: [{ |
| value: 250, |
| name: 'km/h' |
| }] |
| }, |
| { |
| name: 'gauge 1', |
| type: 'gauge', |
| min: 0, |
| max: 250, |
| startAngle: -140, |
| endAngle: -305, |
| splitNumber: 5, |
| radius: '35%', |
| center: ['21%', '55%'], |
| axisLine: { |
| lineStyle: { |
| color: [ |
| [1, '#AE96A6'] |
| ], |
| } |
| }, |
| splitLine: { |
| distance: -7, |
| length: 12, |
| lineStyle: { |
| color: '#fff', |
| width: 4 |
| } |
| }, |
| axisTick: { |
| distance: -8, |
| length: 8, |
| lineStyle: { |
| color: '#fff', |
| width: 2 |
| } |
| }, |
| axisLabel: { |
| distance: 14, |
| fontSize: 18, |
| fontWeight: 800, |
| fontFamily: "Arial", |
| color: '#fff' |
| }, |
| anchor: {}, |
| pointer: { |
| icon: 'path://M-36.5,23.9L-41,4.4c-0.1-0.4-0.4-0.7-0.7-0.7c-0.5-0.1-1.1,0.2-1.2,0.7l-4.5,19.5c0,0.1,0,0.1,0,0.2v92.3c0,0.6,0.4,1,1,1h9c0.6,0,1-0.4,1-1V24.1C-36.5,24-36.5,23.9-36.5,23.9z M-39.5,114.6h-5v-85h5V114.6z', |
| width: 5, |
| length: '40%', |
| offsetCenter: [0, '-58%'], |
| itemStyle: { |
| color: '#f00', |
| shadowColor: 'rgba(255, 0, 0)', |
| shadowBlur: 5, |
| shadowOffsetY: 2 |
| } |
| }, |
| title: { |
| color: '#fff', |
| fontSize: 14, |
| fontWeight: 800, |
| fontFamily: "Arial", |
| offsetCenter: [0, 0] |
| }, |
| detail: { |
| show: false |
| }, |
| data: [{ |
| value: 0, |
| name: '当前位置:\n \n 中科路' |
| }] |
| }, |
| // middle |
| { |
| name: 'gauge 2', |
| type: 'gauge', |
| min: 0, |
| max: 8, |
| z: 10, |
| startAngle: 210, |
| endAngle: -30, |
| splitNumber: 8, |
| radius: '50%', |
| center: ['50%', '50%'], |
| axisLine: { |
| show: true, |
| lineStyle: { |
| width: 0, |
| color: [ |
| [0.825, '#fff'], |
| [1, '#f00'] |
| ] |
| } |
| }, |
| splitLine: { |
| distance: 20, |
| length: 15, |
| lineStyle: { |
| color: 'auto', |
| width: 4, |
| shadowColor: 'rgba(255, 255, 255, 0.5)', |
| shadowBlur: 15, |
| shadowOffsetY: -10 |
| } |
| }, |
| axisTick: { |
| distance: 20, |
| length: 8, |
| lineStyle: { |
| color: 'auto', |
| width: 2, |
| shadowColor: 'rgba(255, 255, 255)', |
| shadowBlur: 10, |
| shadowOffsetY: -10, |
| } |
| }, |
| axisLabel: { |
| distance: 10, |
| fontSize: 35, |
| fontWeight: 800, |
| fontFamily: "Arial", |
| color: '#fff' |
| }, |
| anchor: {}, |
| pointer: { |
| icon: 'path://M-36.5,23.9L-41,4.4c-0.1-0.4-0.4-0.7-0.7-0.7c-0.5-0.1-1.1,0.2-1.2,0.7l-4.5,19.5c0,0.1,0,0.1,0,0.2v92.3c0,0.6,0.4,1,1,1h9c0.6,0,1-0.4,1-1V24.1C-36.5,24-36.5,23.9-36.5,23.9z M-39.5,114.6h-5v-85h5V114.6z', |
| width: 10, |
| offsetCenter: [0, '-10%'], |
| length: '75%', |
| itemStyle: { |
| color: '#f00', |
| shadowColor: 'rgba(255, 0, 0)', |
| shadowBlur: 5, |
| shadowOffsetY: 3 |
| } |
| }, |
| title: { |
| color: '#fff', |
| fontSize: 12, |
| fontWeight: 800, |
| fontFamily: "Arial", |
| offsetCenter: [0, '-50%'] |
| }, |
| data: [{ |
| value: 0.6, |
| name: '1/min x 1000' |
| }], |
| detail: { |
| show: false |
| } |
| }, |
| { |
| name: 'gauge 3', |
| type: 'gauge', |
| min: 0, |
| max: 8, |
| z: 10, |
| splitNumber: 8, |
| radius: '50%', |
| axisLine: { |
| lineStyle: { |
| width: 14, |
| color: [ |
| [1, '#000'] |
| ], |
| } |
| }, |
| splitLine: { |
| show: false |
| }, |
| axisTick: { |
| show: false |
| }, |
| axisLabel: { |
| show: false |
| }, |
| anchor: {}, |
| pointer: { |
| show: false |
| }, |
| title: { |
| show: false |
| }, |
| detail: { |
| offsetCenter: ['25%', '50%'], |
| formatter: '{a|{value}}{b|km/h}', |
| rich: { |
| a: { |
| fontSize: 60, |
| fontWeight: 800, |
| fontFamily: "Arial", |
| color: '#fff', |
| align: 'center', |
| padding: [0, 5, 0, 0] |
| }, |
| b: { |
| fontSize: 14, |
| fontWeight: 800, |
| fontFamily: "Arial", |
| color: '#fff', |
| rotate: 30, |
| padding: [0, 0, 20, 0] |
| } |
| } |
| }, |
| // value is speed |
| data: [{ |
| value: 0, |
| name: '' |
| }] |
| }, |
| // right |
| { |
| name: 'gauge 4', |
| type: 'gauge', |
| min: 0, |
| max: 8, |
| startAngle: 135, |
| endAngle: -150, |
| splitNumber: 8, |
| radius: '35%', |
| center: ['79%', '55%'], |
| axisLine: { |
| lineStyle: { |
| color: [ |
| [1, '#AE96A6'] |
| ], |
| } |
| }, |
| splitLine: { |
| show: false |
| }, |
| axisTick: { |
| show: false |
| }, |
| axisLabel: { |
| show: false |
| }, |
| anchor: {}, |
| pointer: { |
| show: false |
| }, |
| title: {}, |
| detail: { |
| offsetCenter: ['-15%', 0], |
| formatter: [ |
| '{a| 00:00}', |
| '{a|行驶时间 0:00}{b| h}', |
| '{a|行驶距离 0.0}{b| km}', |
| '{a|平均耗能 ---}{b| 1/100km}', |
| '{a|平均速度 ---}{b| km/h}' |
| ].join('\n'), |
| rich: { |
| a: { |
| fontSize: 14, |
| fontWeight: 800, |
| fontFamily: "Arial", |
| lineHeight: 22, |
| color: '#fff', |
| align: 'left' |
| }, |
| b: { |
| fontWeight: 600, |
| fontFamily: "Arial", |
| lineHeight: 22, |
| color: '#fff', |
| align: 'left' |
| } |
| } |
| }, |
| progress: { |
| show: true, |
| width: 3, |
| itemStyle: { |
| color: '#fff' |
| } |
| }, |
| data: [{ |
| value: 250, |
| name: '' |
| }] |
| }, |
| { |
| name: 'gauge 5', |
| type: 'gauge', |
| min: 0, |
| max: 1, |
| startAngle: 125, |
| endAngle: 55, |
| splitNumber: 2, |
| radius: '34%', |
| center: ['79%', '55.3%'], |
| axisLine: { |
| lineStyle: { |
| width: 9, |
| color: [ |
| [0.15, '#f00'], |
| [1, 'rgba(255, 0, 0, 0)'] |
| ], |
| } |
| }, |
| splitLine: { |
| distance: -14, |
| length: 16, |
| lineStyle: { |
| color: '#fff', |
| width: 4 |
| } |
| }, |
| axisTick: { |
| distance: -14, |
| length: 10, |
| lineStyle: { |
| color: '#fff', |
| width: 2 |
| } |
| }, |
| axisLabel: { |
| distance: 12, |
| fontSize: 18, |
| fontWeight: 800, |
| fontFamily: "Arial", |
| color: '#fff', |
| formatter: function(value) { |
| if (value === 0.5) { |
| return '2/4'; |
| } |
| if (value === 1) { |
| return '4/4'; |
| } |
| return value; |
| } |
| }, |
| progress: { |
| show: true, |
| width: 5, |
| itemStyle: { |
| color: '#fff' |
| } |
| }, |
| anchor: { |
| show: true, |
| itemStyle: {}, |
| offsetCenter: ['-22%', '-57%'], |
| size: 18, |
| icon: 'path://M1.11979167,1.11111112 C1.11979167,0.497461393 1.61725306,0 2.23090279,0 L12.2309028,0 C12.8445525,1.43824153e-08 13.3420139,0.497461403 13.3420139,1.11111112 L13.3420139,10 L15.5642361,10 C16.7915356,10 17.7864583,10.9949228 17.7864583,12.2222222 L17.7864583,16.6666667 C17.7865523,17.28025 18.2839861,17.7776077 18.8975694,17.7776077 C19.5111527,17.7776077 20.0085866,17.28025 20.0086805,16.6666667 L20.0086805,8.88888888 L17.7864583,8.88888888 C17.1728086,8.88888888 16.6753472,8.3914275 16.6753472,7.77777779 L16.6753472,3.79333333 L15.6197917,2.73777777 C15.1859413,2.30392741 15.1859413,1.60051702 15.6197917,1.16666667 L15.6197917,1.16666667 C16.053642,0.732816318 16.7570524,0.732816318 17.1909028,1.16666667 L21.9053472,5.88111112 C22.1140468,6.08922811 22.2312072,6.37193273 22.2309028,6.66666667 L22.2309028,16.6666667 C22.2309028,18.5076158 20.7385186,20 18.8975695,20 C17.0566203,20 15.5642361,18.5076158 15.5642361,16.6666667 L15.5642361,12.2222222 L13.3420139,12.2222222 L13.3420139,17.7777778 L13.3420139,17.7777778 C13.9556636,17.7777778 14.453125,18.2752392 14.453125,18.8888889 L14.453125,18.8888889 C14.453125,19.5025386 13.9556636,20 13.3420139,20 L1.11979165,20 C0.506141934,20 0.00868054688,19.5025386 0.00868054687,18.8888889 L0.00868054687,18.8888889 C0.00868054688,18.2752392 0.506141934,17.7777778 1.11979165,17.7777778 L1.11979167,17.7777778 L1.11979167,1.11111112 Z M3.34201388,2.22222221 L3.34201388,8.88888888 L11.1197917,8.88888888 L11.1197917,2.22222221 L3.34201388,2.22222221 Z' |
| }, |
| pointer: { |
| show: false |
| }, |
| title: {}, |
| detail: { |
| offsetCenter: ['10%', '-56%'], |
| formatter: '{a|831}{b| km}', |
| rich: { |
| a: { |
| fontSize: 15, |
| fontWeight: 800, |
| fontFamily: "Arial", |
| color: '#fff' |
| }, |
| b: { |
| fontWeight: 600, |
| fontFamily: "Arial", |
| color: '#fff' |
| } |
| } |
| }, |
| data: [{ |
| value: 0.85, |
| name: '' |
| }] |
| }, |
| { |
| name: 'gauge 6', |
| type: 'gauge', |
| min: -120, |
| max: -60, |
| startAngle: 230, |
| endAngle: 310, |
| clockwise: false, |
| splitNumber: 2, |
| radius: '35%', |
| center: ['79%', '55%'], |
| axisLine: { |
| lineStyle: { |
| color: [ |
| [1, '#AE96A6'], |
| [1.1, '#f00'] |
| ], |
| } |
| }, |
| splitLine: { |
| distance: -8, |
| length: 12, |
| lineStyle: { |
| color: '#fff', |
| width: 4 |
| } |
| }, |
| axisTick: { |
| splitNumber: 3, |
| length: 8, |
| distance: -8, |
| lineStyle: { |
| color: '#fff', |
| width: 2 |
| } |
| }, |
| axisLabel: { |
| distance: 14, |
| fontSize: 18, |
| fontWeight: 800, |
| fontFamily: "Arial", |
| color: '#fff', |
| formatter: function(value) { |
| return -value |
| } |
| }, |
| anchor: { |
| show: true, |
| itemStyle: {}, |
| offsetCenter: [0, '55%'], |
| size: 20, |
| icon: 'path://M-34.1-1.1L-34.1-1.1c0-0.3-0.3-0.6-0.6-0.6h-3.6v-1.5c0-0.5-0.2-0.9-0.6-1.1s-0.9-0.2-1.3,0c-0.4,0.2-0.6,0.7-0.6,1.1V7.9c0,0,0,0.1,0,0.1c-0.8,0.5-1.2,1.5-0.9,2.5c0.3,0.9,1.1,1.6,2.1,1.6c1,0,1.8-0.6,2.1-1.5c0.3-0.9,0-1.9-0.8-2.5V6.3h3.5c0.4,0,0.7-0.3,0.7-0.7l0,0c0-0.4-0.3-0.7-0.7-0.7h-3.5V2.9h3.5c0.4,0,0.7-0.3,0.7-0.7l0,0c0-0.4-0.3-0.7-0.7-0.7h-3.5v-2.1h3.6C-34.4-0.5-34.1-0.8-34.1-1.1z M-44.9,11.6c-0.7,0-1.4-0.2-2-0.6c-0.4-0.3-0.9-0.4-1.4-0.4c-0.4,0-0.9,0.2-1.2,0.4c-0.4,0.2-1.4-0.9-0.9-1.3c0.6-0.4,1.3-0.6,2-0.7c0.8,0,1.5,0.2,2.2,0.5c0.4,0.3,0.9,0.4,1.3,0.4c0.6,0,1.1-0.2,1.5-0.6s1.6,0.7,0.9,1.3S-44,11.6-44.9,11.6L-44.9,11.6z M-34.3,11.6c-0.7,0-1.4-0.3-2-0.7c-0.6-0.4,0.5-1.6,0.9-1.3s0.8,0.4,1.2,0.4c0.5,0,1-0.1,1.4-0.4c0.6-0.3,1.3-0.5,2-0.6h0c0.9,0,1.7,0.3,2.4,0.9c0.7,0.5-0.5,1.6-0.9,1.3c-0.4-0.3-1-0.6-1.5-0.6h0c-0.5,0-0.9,0.2-1.3,0.4c-0.6,0.3-1.3,0.5-2,0.6H-34.3z M-33.5,16.3c-0.7,0-1.4-0.3-1.9-0.8c-0.4-0.3-0.6-0.5-1-0.5c-0.4,0-0.7,0.2-1,0.4c-0.6,0.5-1.3,0.7-2,0.7c-0.7,0-1.4-0.3-1.9-0.8c-0.2-0.3-0.6-0.4-0.9-0.4c-0.4,0-0.7,0.1-1.1,0.5c-0.6,0.5-1.3,0.7-2.1,0.7c-0.7-0.1-1.4-0.4-1.9-0.9c-0.4-0.3-0.6-0.5-1-0.5c-0.3,0-0.6,0.2-0.9,0.4s-1.6-0.7-1.1-1.2c0.5-0.5,1.2-0.8,1.9-0.9c1-0.1,1.6,0.4,2.1,0.8c0.3,0.3,0.6,0.5,1,0.5c0.4,0,0.6-0.1,1-0.4c0.6-0.5,1.4-0.8,2.1-0.8c0.7,0,1.4,0.3,1.9,0.8c0.2,0.2,0.6,0.4,0.9,0.4c0.4,0,0.6-0.1,1-0.4c0.6-0.5,1.3-0.7,2-0.7c0.8,0,1.5,0.3,2,0.9c0.4,0.3,0.6,0.4,0.9,0.4c0.3,0,0.7-0.2,1.1-0.5c0.5-0.4,1.2-0.9,2.3-0.8c0.7,0,1.4,0.3,1.9,0.7c0.5,0.4-0.7,1.5-1,1.3s-0.6-0.4-1-0.4c-0.4,0-0.7,0.2-1.2,0.5C-32,15.9-32.7,16.2-33.5,16.3L-33.5,16.3z' |
| }, |
| pointer: { |
| icon: 'path://M2.9,0.7L2.9,0.7c1.4,0,2.6,1.2,2.6,2.6v115c0,1.4-1.2,2.6-2.6,2.6l0,0c-1.4,0-2.6-1.2-2.6-2.6V3.3C0.3,1.9,1.4,0.7,2.9,0.7z', |
| width: 15, |
| length: '4', |
| offsetCenter: [0, '-90%'], |
| itemStyle: { |
| color: '#f00' |
| } |
| }, |
| title: {}, |
| detail: { |
| show: false |
| }, |
| data: [{ |
| value: -120, |
| name: '' |
| }] |
| } |
| ] |
| }; |
| |
| myChart.setOption(option, true); |
| |
| function generateRandom(lower, upper, fixed) { |
| return (Math.random() * (upper - lower + 1) + lower).toFixed(fixed) - 0; |
| } |
| |
| function createFormatter(moveTime, moveDistance, avgEnergy, avgSpeed) { |
| console.log(); |
| const date = new Date(); |
| let hour = date.getHours(); |
| let minite = date.getMinutes() |
| let time = (hour < 10 ? '0' + hour : hour) + ':' + (minite < 10 ? '0' + minite : minite); |
| moveTime < 10 && (moveTime = '0' + moveTime); |
| return [ |
| `{a| ${time}}`, |
| `{a|行驶时间 ${'0:' + moveTime}}{b| h}`, |
| `{a|行驶距离 ${moveDistance}}{b| km}`, |
| `{a|平均耗能 ${avgEnergy}}{b| 1/100km}`, |
| `{a|平均速度 ${avgSpeed}}{b| km/h}` |
| ].join('\n'); |
| } |
| |
| const interval = 2; |
| let moveTime = 0; |
| let moveDistance = 0; |
| let avgEnergy = 0; |
| let avgSpeed = 0; |
| let minite = 0; |
| setInterval(function() { |
| let speed = generateRandom(70, 80, 0); |
| option.series[1].data[0].value = speed; |
| option.series[3].data[0].value = speed; |
| let rotatingSpeed = generateRandom(2.5, 3, 1); |
| option.series[2].data[0].value = rotatingSpeed; |
| option.series[6].data[0].value = -generateRandom(105, 115, 0); |
| |
| moveTime += interval; |
| if (moveTime % 60 === 0) { |
| minite++; |
| if (minite > 30) { |
| moveTime = 2; |
| moveDistance = 0; |
| avgEnergy = 0; |
| avgSpeed = 0; |
| minite = 0; |
| // oil |
| if (option.series[5].data[0].value > 0.3) { |
| option.series[5].data[0].value -= 0.1; |
| } else { |
| option.series[5].data[0].value = 1; |
| } |
| } |
| } |
| // mock value |
| moveDistance += interval / 3600 * speed; |
| avgSpeed = moveDistance / (moveTime / 3600); |
| avgEnergy = 85 * avgSpeed; |
| option.series[4].detail.formatter = createFormatter(minite, moveDistance.toFixed(1), avgEnergy.toFixed(0), avgSpeed.toFixed(0)); |
| myChart.setOption(option, true); |
| }, 2000); |