blob: 072417b315280f3c32164c08f45bd232d55d61d3 [file] [log] [blame]
/*
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);