pie2

描述:当前是关于Echarts图表中的 示例。
 
            var sData = [{
    name: "已配送",
    value: 40
}, {
    name: "未配送",
    value: 46
}, {
    name: "已终止",
    value: 14
}];

var data = [];
var dataRotate = [];
var color = ['#1382D3', '#2D61E8', '#4F2CDE']
for (var i = 0; i < sData.length; i++) {
    data.push({
        value: sData[i].value,
        name: sData[i].name,
        itemStyle: {
            normal: {
                borderWidth: 6,
                // shadowBlur: 20,
                borderColor: color[i],
                // shadowColor: color[i]
            }
        }
    }, {
        value: 1,
        name: '',
        itemStyle: {
            normal: {
                label: {
                    show: false
                },
                labelLine: {
                    show: false
                },
                color: 'rgba(0, 0, 0, 0)',
                borderColor: 'rgba(0, 0, 0, 0)',
                borderWidth: 0
            }
        }
    });
    
    dataRotate.push({
        value: sData[i].value,
        name: sData[i].name,
        itemStyle: {
            normal: {
                borderWidth: 6,
                borderColor: color[i],
            }
        },
        label:{
            rotate:angleText(i),
        }
    }, {
        value: 1,
        name: '',
        itemStyle: {
            normal: {
                label: {
                    show: false
                },
                labelLine: {
                    show: false
                },
                color: 'rgba(0, 0, 0, 0)',
                borderColor: 'rgba(0, 0, 0, 0)',
                borderWidth: 0
            }
        }
    });
}
var legendData = [];
for (var i = 0; i < sData.length; i++) {
    legendData.push(sData[i].name)
}
function Pie() {
    let dataArr = [];
    for (var i = 0; i < 300; i++) {
        if (i % 5 === 0) {
            dataArr.push({
                name: (i + 1).toString(),
                value: 20,
                itemStyle: {
                    normal: {
                        color: "rgba(0,255,255,.3)",
                        borderWidth: 0,
                        borderColor: "rgba(0,0,0,0)"
                    }
                }
            })
        } else {
            dataArr.push({
                name: (i + 1).toString(),
                value: 30,
                itemStyle: {
                    normal: {
                        color: "rgba(0,0,0,0)",
                        borderWidth: 0,
                        borderColor: "rgba(0,0,0,0)"
                    }
                }
            })
        }
    }
    return dataArr
}

function angleText(i) {
    let totalValue = 0;
    let initValue = 0;
    for (var j = 0; j < sData.length; j++){
        totalValue += sData[j].value;
    }
    for(var k=0; k< sData.length; k++){
        if(k<i){
            initValue += sData[k].value;
        }
    }
    //每个元素的角度
    var everyAngle = 360 / totalValue;
    //文字现在所在的角度
    var currentAngle = (sData[i].value/2+initValue) * everyAngle;

    if (currentAngle <= 90) {
        return -currentAngle;
    } else if (currentAngle <= 180 && currentAngle > 90) {
        return -currentAngle;
    } else if (currentAngle < 270 && currentAngle > 180) {
        return -currentAngle;
    } else if (currentAngle < 360 && currentAngle >= 270) {
        return -currentAngle;
    }
}

var seriesOption = [{
    name: '',
    type: 'pie',
    clockWise: true,
    radius: ['64%', '67%'],
    hoverAnimation: false,
    itemStyle: {
        normal: {
            label: {
                show: true,
                // position: 'outside',
                distanceToLabelLine: 10,
                color: '#ddd',
                formatter: function(params) {
                    var percent = 0;
                    var total = 0;
                    for (var i = 0; i < sData.length; i++) {
                        total += sData[i].value;
                    }
                    
                    percent = ((params.value / total) * 100).toFixed(2);
                    if (params.name !== '') {
                        return percent + '%';
                        // return params.name + '\n' + '\n' + percent + '%';
                    } else {
                        return '';
                    }
                },
            },
            labelLine: {
                length: 20,
                length2: 20,
                show: false,
                color: '#00ffff'
            }
        }
    },
    data: data
},
{
        
        type: 'pie',
        silent: true, //取消高亮
        radius: ['64%', '67%'],
        // center: ["50%", "50%"],
        labelLine: {
            normal: {
                length: 20,
                length2: 0,
                lineStyle: {
                    color: 'transparent'
                }
            }
        },
        label: {
            normal: {
                formatter: params => {
                    return '{cir|▴}';
                },
                rich: {
                    cir: {
                        fontSize: 40,
                    },
                }
            },
        },
        data: dataRotate,
        z: -1
    },
{
            type: 'pie',
            zlevel: 0,
            silent: true,
            startAngle: -147.5,
            radius: ['59%', '58%'],
            z: 1,
            label: {
                normal: {
                    show: false
                },
            },
            labelLine: {
                normal: {
                    show: false
                }
            },
            data: Pie()
        },{
        type: 'gauge',
        radius: '40%',
        startAngle:'0',
		endAngle:'-359.99',
        splitNumber: 10,
        center: ['50%', '50%'],
        pointer: {
            show: false
        },
        title: {
            show: false
        },
        detail: {
            show: false
        },
        axisLine: {
            lineStyle: {
                width: 30,
                color: [
                    [0, '#5fa7ca'],
                    [1, '#5fa7ca']
                ],
                opacity: 0
            }
        },
        axisTick: {
            length: 16,
            lineStyle: {
                color: 'auto'
            }
        },
        splitLine: {
            show: false
        },
        axisLabel: {
            show: false,
        }
    },{
    name: '第二层环',
    type: 'pie',
    z: 1,
    tooltip: {
        show: false
    },
    center: ['50%', '50%'],
    radius: ['36%', '37%'],
    hoverAnimation: false,
    clockWise: false,
    itemStyle: {
        normal: {
            borderWidth: 5,
            shadowBlur: 15,
            borderColor:'rgba(98,200,249,.3)',
            shadowColor: 'rgba(98,200,249,.3)',
            color: 'rgba(98,200,249,.95)',
        },
        emphasis: {
            color: 'rgba(98,200,249,.95)',
        }
    },
    label: {
        show: false
    },
    data: [100]
},{
    name: '第一层环',
    type: 'pie',
    z: 1,
    tooltip: {
        show: false
    },
    center: ['50%', '50%'],
    radius: ['29%', '33%'],
    hoverAnimation: false,
    clockWise: false,
    itemStyle: {
        normal: {
            borderWidth: 5,
            shadowBlur: 15,
            borderColor:'rgba(255,255,255,.3)',
            shadowColor: 'rgba(255,255,255,.3)',
            color: 'rgba(255,255,255,.95)',
        },
        emphasis: {
            color: 'rgba(255,255,255,.95)',
        }
    },
    label: {
        show: false
    },
    data: [100]
}];
option = {
    backgroundColor: '#0A2E5D',
    color: color,
    title: {
        text: '',
        top: '48%',
        textAlign: "center",
        left: "49%",
        textStyle: {
            color: '#fff',
            fontSize: 22,
            fontWeight: '400'
        }
    },
    graphic: {
        elements: [{
            type: "image",
            z: 3,
            style: {
                width: 178,
                height: 178
            },
            left: 'center',
            top: 'center',
            position: [100, 100]
        }]
    },
    tooltip: {
        show: false
    },
    legend: {
        // icon: "rect",
        itemWidth: 20,
        itemHeight: 10,
        orient: 'vertical',
        data: legendData,
        right: '8%',
        align: 'right',
        top: 'center',
        textStyle: {
            color: "#fff",
            padding: [0,10,0,0]
        },
        itemGap: 40,
        borderRadius:5,
    },
    toolbox: {
        show: false
    },
    series: seriesOption
}