普通饼图

描述:当前是关于Echarts图表中的 饼图 示例。
 
            


//hex颜色转rgb颜色
function HexToRgb(str) {
    var r = /^\#?[0-9A-F]{6}$/;
    //test方法检查在字符串中是否存在一个模式,如果存在则返回true,否则返回false
    if (!r.test(str)) return console.log('输入错误的hex');
    //replace替换查找的到的字符串
    str = str.replace('#', '');
    //match得到查询数组
    var hxs = str.match(/../g);
    //alert('bf:'+hxs)
    for (var i = 0; i < 3; i++) hxs[i] = parseInt(hxs[i], 16);
    //alert(parseInt(80, 16))
    //console.log(hxs);
    return hxs;
}
//GRB颜色转Hex颜色
function RgbToHex(a, b, c) {
    var r = /^\d{1,3}$/;
    if (!r.test(a) || !r.test(b) || !r.test(c)) return console.log('输入错误的rgb颜色值');
    var hexs = [a.toString(16), b.toString(16), c.toString(16)];
    for (var i = 0; i < 3; i++) if (hexs[i].length == 1) hexs[i] = '0' + hexs[i];
    return '#' + hexs.join('');
}

//得到hex颜色值为color的加深颜色值,level为加深的程度,限0-1之间
function getDarkColor(color, level) {
    var r = /^\#?[0-9A-F]{6}$/;
    if (!r.test(color)) return console.log('输入错误的hex颜色值');
    var rgbc = HexToRgb(color);
    //floor 向下取整
    for (var i = 0; i < 3; i++) rgbc[i] = Math.floor(rgbc[i] * (1 - level));
    return RgbToHex(rgbc[0], rgbc[1], rgbc[2]);
}
//得到hex颜色值为color的减淡颜色值,level为加深的程度,限0-1之间
function getLightColor(color, level) {
    var r = /^\#?[0-9A-F]{6}$/;
    if (!r.test(color)) return console.log('输入错误的hex颜色值');
    var rgbc = HexToRgb(color);
    for (var i = 0; i < 3; i++) rgbc[i] = Math.floor((255 - rgbc[i]) * level + rgbc[i]);
    return RgbToHex(rgbc[0], rgbc[1], rgbc[2]);
}

let echartData = [
    {
        name: 'A类',
        value: '3720',
    },
    {
        name: 'B类',
        value: '2920',
    },
    {
        name: 'C类',
        value: '2200',
    },
    {
        name: 'D类',
        value: '1420',
    },
    {
        name: 'E类',
        value: '1420',
    },
    {
        name: 'F类',
        value: '1420',
    },
    {
        name: 'G类',
        value: '1420',
    },
    {
        name: 'H类',
        value: '1420',
    },
];
        let pieCenter = ['30%', "50%"]
let shadowData = echartData.map((item) => {
    return {
        name: '',
        value: item.value,
    };
});
var nameArray = echartData.map((item) => {
    return item.name;
});
let color  = ["#3FB1E3","#6BE6C1","#626C91","#93B7E3","#C4EBAD","#96DEE8","#EDAFDA","#FE8463"]
let darkColor = echartData.map((item,i)=>{
    return getDarkColor(color[i],0.4)
})
option = {
    backgroundColor: '#031845',
    tooltip: {
        trigger: 'item',
        backgroundColor: 'rgba(20,50,125,.6)',
    },
    legend: [
        {
            icon: `path://M881.387 297.813c38.08 65.387 57.28 136.747 57.28 214.187s-19.094 148.8-57.28 214.187c-38.187 65.28-89.92 117.12-155.2 155.2S589.44 938.667 512 938.667s-148.8-19.094-214.187-57.28c-65.28-38.08-117.013-89.814-155.306-155.307C104.427 660.8 85.333 589.44 85.333 512c0-77.333 19.094-148.693 57.28-214.187 38.08-65.28 89.814-117.013 155.307-155.306C363.2 104.533 434.56 85.333 512 85.333c77.333 0 148.693 19.094 214.187 57.28 65.28 38.187 117.013 89.92 155.2 155.2z m-217.707-47.36C617.387 223.467 566.827 209.92 512 209.92s-105.387 13.547-151.68 40.533-82.987 63.68-109.973 109.974c-26.987 46.293-40.534 96.853-40.534 151.68s13.547 105.386 40.534 151.68c26.986 46.293 63.68 82.986 109.973 109.973 46.293 26.987 96.853 40.533 151.68 40.533s105.387-13.546 151.68-40.533c46.293-26.987 82.987-63.68 109.973-109.973 26.987-46.294 40.534-96.854 40.534-151.68s-13.547-105.387-40.534-151.68c-27.093-46.294-63.786-82.987-109.973-109.974z`,
            orient: 'vertical',
            data: nameArray.slice(4, 8),
            left: '80%',
            top: 'center',
            itemWidth: 15,
            align: 'left',
            textStyle: {
                color: '#fff',
            },
            itemGap: 20,
        },
        {
            icon: `path://M881.387 297.813c38.08 65.387 57.28 136.747 57.28 214.187s-19.094 148.8-57.28 214.187c-38.187 65.28-89.92 117.12-155.2 155.2S589.44 938.667 512 938.667s-148.8-19.094-214.187-57.28c-65.28-38.08-117.013-89.814-155.306-155.307C104.427 660.8 85.333 589.44 85.333 512c0-77.333 19.094-148.693 57.28-214.187 38.08-65.28 89.814-117.013 155.307-155.306C363.2 104.533 434.56 85.333 512 85.333c77.333 0 148.693 19.094 214.187 57.28 65.28 38.187 117.013 89.92 155.2 155.2z m-217.707-47.36C617.387 223.467 566.827 209.92 512 209.92s-105.387 13.547-151.68 40.533-82.987 63.68-109.973 109.974c-26.987 46.293-40.534 96.853-40.534 151.68s13.547 105.386 40.534 151.68c26.986 46.293 63.68 82.986 109.973 109.973 46.293 26.987 96.853 40.533 151.68 40.533s105.387-13.546 151.68-40.533c46.293-26.987 82.987-63.68 109.973-109.973 26.987-46.294 40.534-96.854 40.534-151.68s-13.547-105.387-40.534-151.68c-27.093-46.294-63.786-82.987-109.973-109.974z`,
            orient: 'vertical',
            data: nameArray.slice(0, 4),
            left: '70%',
            top: 'center',
            itemWidth: 15,
            align: 'left',
            textStyle: {
                color: '#fff',
            },
            itemGap: 20,
        },
    ],
    series: [
        {
            name: '阴影',
            type: 'pie',
            hoverAnimation: false,
            legendHoverLink: false,
            radius: ['38%', '45%'],
            center: pieCenter,
            
            color: darkColor,
            label: {
                normal: {
                    show: false,
                },
            },
            labelLine: {
                normal: {
                    show: false,
                },
            },
            emphasis: {
                scale: false,
            },
            tooltip: {
                show: false,
            },

            data: shadowData,
        },
        {
            name: '实际',
            type: 'pie',
            radius: ['43%', '55%'],
            center: pieCenter,
            color: color,
            labelLine: {
                normal: {
                    show: false,
                },
            },
            label: {
                normal: {
                    show: false,
                },
            },
            data: echartData,
        },
    ],
};

myChart.on('legendselectchanged', (obj)=>{
    console.log(obj)
})

let len = 0
setInterval(()=>{
    
    if(len === echartData.length){
        len = 0
    }
    myChart.dispatchAction({
        type: 'downplay',
        seriesIndex: 1,
    })
    myChart.dispatchAction({
        type: 'highlight',
        seriesIndex: 1,
        dataIndex: len,
    })
    myChart.dispatchAction({
        type: 'showTip',
        seriesIndex: 1,
        dataIndex: len,
    })
    len ++
}, 1000)