配置项如下
let value = 45;
let title = '操作指引';
let angle = 0; //角度,用来做简单的动画效果的
function getCirlPoint(x0, y0, r, angle) {
let x1 = x0 + r * Math.cos((angle * Math.PI) / 180);
let y1 = y0 + r * Math.sin((angle * Math.PI) / 180);
return {
x: x1,
y: y1
};
}
option = {
backgroundColor: '#0E192D',
title: {
text: `${title}\n${value}%`,
x: 'center',
y: 'center',
textStyle: {
fontSize: 16,
color: '#ffffff',
}
},
series: [{
name: "内线",
type: "custom",
coordinateSystem: "none",
renderItem: function(params, api) {
console.log(Math.min(
api.getWidth(),
api.getHeight()
) / 2.3)
return {
type: "arc",
shape: {
cx: api.getWidth() / 2,
cy: api.getHeight() / 2,
r: Math.min(
api.getWidth(),
api.getHeight()
) / 4.6,
startAngle: ((0 + angle) * Math.PI) / 180,
endAngle: ((90 + angle) * Math.PI) / 180
},
style: {
stroke: '#0ff',
fill: "transparent",
lineWidth: 1.5
},
silent: true
};
},
data: [0]
},
{
name: "内线",
type: "custom",
coordinateSystem: "none",
renderItem: function(params, api) {
return {
type: "arc",
shape: {
cx: api.getWidth() / 2,
cy: api.getHeight() / 2,
r: Math.min(
api.getWidth(),
api.getHeight()
) / 4.6,
startAngle: ((180 + angle) * Math.PI) / 180,
endAngle: ((270 + angle) * Math.PI) / 180
},
style: {
stroke: '#0ff',
fill: "transparent",
lineWidth: 1.5
},
silent: true
};
},
data: [0]
},
{
name: "外线",
type: "custom",
coordinateSystem: "none",
renderItem: function(params, api) {
return {
type: "arc",
shape: {
cx: api.getWidth() / 2,
cy: api.getHeight() / 2,
r: Math.min(
api.getWidth(),
api.getHeight()
) / 4.3,
startAngle: ((270 + -angle) * Math.PI) / 180,
endAngle: ((40 + -angle) * Math.PI) / 180
},
style: {
stroke: '#0ff',
fill: "transparent",
lineWidth: 1.5
},
silent: true
};
},
data: [0]
}, {
name: "外线",
type: "custom",
coordinateSystem: "none",
renderItem: function(params, api) {
return {
type: "arc",
shape: {
cx: api.getWidth() / 2,
cy: api.getHeight() / 2,
r: Math.min(
api.getWidth(),
api.getHeight()
) / 4.3,
startAngle: ((90 + -angle) * Math.PI) / 180,
endAngle: ((220 + -angle) * Math.PI) / 180
},
style: {
stroke: '#0ff',
fill: "transparent",
lineWidth: 1.5
},
silent: true
};
},
data: [0]
},
// {
// name: "线头点",
// type: "custom",
// coordinateSystem: "none",
// renderItem: function(params, api) {
// let x0 = api.getWidth() / 2;
// let y0 = api.getHeight() / 2;
// let r =
// Math.min(api.getWidth(), api.getHeight()) / 2.1;
// let point = getCirlPoint(x0, y0, r, 90 + -angle);
// return {
// type: "circle",
// shape: {
// cx: point.x,
// cy: point.y,
// r: 5
// },
// style: {
// stroke: '#0ff', //绿
// fill: '#0ff'
// },
// silent: true
// };
// },
// data: [0]
// },
// {
// name: "线头点",
// type: "custom",
// coordinateSystem: "none",
// renderItem: function(params, api) {
// let x0 = api.getWidth() / 2;
// let y0 = api.getHeight() / 2;
// let r =
// Math.min(api.getWidth(), api.getHeight()) / 2.1;
// let point = getCirlPoint(x0, y0, r, 270 + -angle);
// return {
// type: "circle",
// shape: {
// cx: point.x,
// cy: point.y,
// r: 5
// },
// style: {
// stroke: '#0ff', //绿
// fill: '#0ff'
// },
// silent: true
// };
// },
// data: [0]
// },
{
name: "内盘上",
type: 'gauge',
splitNumber: 6,
radius: '31%',
center: ['50%', '50%'],
startAngle: 120,
endAngle: 58.9999,
axisLine: {
show: false,
lineStyle: {
color: [
[1, '#00FFFF']
]
}
},
axisTick: {
show: false
},
splitLine: {
show: true,
length: 22,
lineStyle: {
color: 'auto',
width: 6
}
},
axisLabel: {
show: false
},
detail: {
show: false
}
}, {
name: "内盘下",
type: 'gauge',
splitNumber: 6,
radius: '31%',
center: ['50%', '50%'],
startAngle: -60,
endAngle: -120.9999,
axisLine: {
show: false,
lineStyle: {
color: [
[1, '#00FFFF']
]
}
},
axisTick: {
show: false
},
splitLine: {
show: true,
length: 22,
lineStyle: {
color: 'auto',
width: 6
}
},
axisLabel: {
show: false
},
detail: {
show: false
}
}, {
name: "外盘左",
type: 'gauge',
splitNumber: 6,
radius: '39%',
center: ['50%', '50%'],
startAngle: -155,
endAngle: -205.9999,
axisLine: {
show: false,
lineStyle: {
color: [
[1, '#00FFFF']
]
}
},
axisTick: {
show: false
},
splitLine: {
show: true,
length: 22,
lineStyle: {
color: 'auto',
width: 6
}
},
axisLabel: {
show: false
},
detail: {
show: false
}
}, {
name: "外盘右",
type: 'gauge',
splitNumber: 6,
radius: '39%',
center: ['50%', '50%'],
startAngle: 26,
endAngle: -26.9999,
axisLine: {
show: false,
lineStyle: {
color: [
[1, '#00FFFF']
]
}
},
axisTick: {
show: false
},
splitLine: {
show: true,
length: 22,
lineStyle: {
color: 'auto',
width: 6
}
},
axisLabel: {
show: false
},
detail: {
show: false
}
},
{
type: 'pie',
name: '内层细圆环',
radius: ['31%', '31.5%'],
hoverAnimation: false,
clockWise: false,
itemStyle: {
normal: {
color: '#00FFFF',
}
},
label: {
show: false
},
data: [100]
},
{
type: 'pie',
name: '外层细圆环',
radius: ['41%', '41.5%'],
hoverAnimation: false,
clockWise: false,
itemStyle: {
normal: {
color: '#00FFFF'
}
},
label: {
show: false
},
data: [100]
},
]
};
function setdata() {
let dataArr = [{
name: (1).toString(),
value: 40,
itemStyle: {
normal: {
color: 'rgb(0,255,255,.3)',
}
}
},
{
name: (2).toString(),
value: 100,
itemStyle: {
normal: {
color: 'rgb(0,0,0,0)',
borderWidth: 0,
borderColor: "rgba(0,255,255,1)",
}
}
}, {
name: (3).toString(),
value: 40,
itemStyle: {
normal: {
color: 'rgb(0,255,255,.3)',
}
}
},
{
name: (4).toString(),
value: 100,
itemStyle: {
normal: {
color: 'rgb(0,0,0,0)',
borderWidth: 0,
borderColor: "rgba(0,255,255,1)",
}
}
}
];
// for (var i = 0; i < 100; i++) {
// if (i % 2 === 0) {
// dataArr.push({
// name: (i + 1).toString(),
// value: 40,
// itemStyle: {
// normal: {
// color: 'rgb(0,255,255,.3)',
// }
// }
// })
// } else {
// dataArr.push({
// name: (i + 1).toString(),
// value: 100,
// itemStyle: {
// normal: {
// color: 'rgb(0,0,0,0)',
// borderWidth: 0,
// borderColor: "rgba(0,255,255,1)",
// }
// }
// })
// }
// }
return dataArr
}
function startTimer() {
timer = setInterval(() => {
let option = myChart.getOption();
angle = angle + 3;
// option.series[0].startAngle = option.series[0].startAngle - 1;
// option.series[1].startAngle = option.series[1].startAngle - 1;
// option.series[1].endAngle = option.series[1].endAngle - 1;
// option.series[2].startAngle = option.series[2].startAngle - 1;
// option.series[2].endAngle = option.series[2].endAngle - 1;
// option.series[3].startAngle = option.series[3].startAngle + 1;
// option.series[3].endAngle = option.series[3].endAngle + 1;
// option.series[4].startAngle = option.series[4].startAngle + 1;
// option.series[4].endAngle = option.series[4].endAngle + 1;
myChart.setOption(option);
}, 100);
}
setTimeout(startTimer, 0);