玩转ECharts之实现“动态颜色的Label”

描述:当前是关于Echarts图表中的 饼图 示例。
 
            option = {
    "backgroundColor": 'rgb(0,0,0)',
    "color": ["#1576d2", "#d14a82", "#26c1f2", "#a166ff", "#1271cc", "#272f67", "rgba(156, 43, 182, 1)"],
    "series": [{
        "radius": ["8%", "10%"],
        "data": [{
            "value": 1,
            "itemStyle": {
                "color": "#a0a0a0",
                "matchColor": true,
                "opacity": 0.3
            }
        }],
        "type": "pie",
        "silent": true,
        "label": {
            "show": false
        },
        "labelLine": {
            "show": false
        },
        "animation": false
    }, {
        "type": "pie",
        "data": [{
            "name": "苹果",
            "value": 32,
            "_startArc": 0,
            "_endArc": 1.6589268137767885,
        }, {
            "name": "三星",
            "value": 26,
            "_startArc": 1.6589268137767885,
            "_endArc": 3.6911121606533546,
        }, {
            "name": "华为",
            "value": 12,
            "_startArc": 3.6911121606533546,
            "_endArc": 3.898478012375453,
        }, {
            "name": "小米",
            "value": 26,
            "_startArc": 3.898478012375453,
            "_endArc": 5.557404826152241,
        }, {
            "name": "其他",
            "value": 3,
            "_startArc": 5.557404826152241,
            "_endArc": 6.283185307179586,
        }],
        "radius": ["10%", "35%"],
        "label": {
            "nameColor": "#CACACA",
            "valueColor": "color",
            "labelStyle": "style2",
            "fontSize": 20,
            "formatter": function formatterFunc(params) {
                const values = params.data; // 内容
                const formatter = [`{rect|}{name|${values.name}} ${values.value}%`, `${values.value}% {name|${values.name}}{rect|}`];
                // 这里拿到了开始角度和结束角度,计算了一个label指示线的标注角度
                const midAngle = (values._startArc + values._endArc) / 2;
                // 分情况判断了一下 决定采用左边的还是右边的
                if (midAngle <= Math.PI) {
                    return formatter[0];
                } else {
                    return formatter[1];
                }
            },
            "rich": {
                "name": {
                    "color": '#fff',
                    "borderColor": '#264884',
                    "borderWidth": 1,
                    "padding": [10, 15],
                },
                "rect": {
                    "height": 12,
                    "width": 8,
                    "backgroundColor": "#264884"
                }
            },
            "opacity": 1,
            "position": "outside",
            "matchColor": true,
        },
        "labelLine": {
            "lineStyle": {
                "color": "#fff"
            }
        },
        "itemStyle": {
            "borderColor": "#000",
            "borderWidth": 2
        },
        "hoverAnimation": false
    }]
}