Echarts 嵌套餅圖實現,內環點擊控制外環顯示


Echarts有交互事件,但是如果用其進行圖形變更,恐怕就只有重新修改配置了、

如圖,我想要實現,內圈的數據控制外圈的圖形,當點擊內環的某一塊時,就可以實現,更改外環的目的。

起初我想能不能直接修改option里 series的data數據達到修改的外圈圖形的效果,可惜沒那么那么容易,我暫時想到的修改實現方法,設置option的,達到修改外圈的目的。廢話不多說,上代碼:

<script>
    var dataA=[];
    var option = {
        tooltip : {
            trigger: 'item',
            formatter: "{a} <br/>{b} : {c} ({d}%)"
        },
        legend: {
            orient : 'vertical',
            x : 'left',
            data:['直達','營銷廣告','搜索引擎','郵件營銷','聯盟廣告','視頻廣告','百度','谷歌','必應','其他']
        },
        toolbox: {
            show : true,
            feature : {
                mark : {show: true},
                dataView : {show: true, readOnly: false},
                magicType : {
                    show: true,
                    type: ['pie', 'funnel']
                },
                restore : {show: true},
                saveAsImage : {show: true}
            }
        },
        calculable : false,
        series : [
            {
                name:'訪問來源',
                type:'pie',
                selectedMode: 'single',
                radius : [0, 70],

                // for funnel
                x: '20%',
                width: '40%',
                funnelAlign: 'right',
                max: 1548,

                itemStyle : {
                    normal : {
                        label : {
                            position : 'inner'
                        },
                        labelLine : {
                            show : false
                        }
                    }
                },
                data:[
                    {value:335, name:'直達'},
                    {value:679, name:'營銷廣告'},
                    {value:1548, name:'搜索引擎'}
                ]
            },
            {
                name:'訪問來源',
                type:'pie',
                radius : [100, 140],

                // for funnel
                x: '60%',
                width: '35%',
                funnelAlign: 'left',
                max: 1048,

                data:dataA
                /*[
                   {value:335, name:'直達'},
                    {value:310, name:'郵件營銷'},
                    {value:234, name:'聯盟廣告'},
                    {value:135, name:'視頻廣告'},
                    {value:1048, name:'百度'},
                    {value:251, name:'谷歌'},
                    {value:147, name:'必應'},
                    {value:102, name:'其他'}
                ]*/
            }
        ]
    };
    var data=[];
     data[0]=[
        {value:335, name:'直達'},
        {value:310, name:'郵件營銷'}

    ];
     data[1]=[

        {value:234, name:'聯盟廣告'},
        {value:135, name:'視頻廣告'}

    ];
    data[2]=[
        {value:1048, name:'百度'},
        {value:251, name:'谷歌'},
        {value:147, name:'必應'},
        {value:102, name:'其他'}];

    // 路徑配置
    require.config({
        paths: {
            echarts: 'www/js'
        }
    });
    var myChart;
    require(['echarts','echarts/chart/pie','echarts/chart/funnel'],function(echarts){
         myChart = echarts.init(document.getElementById('main'));
        // 使用剛指定的配置項和數據顯示圖表。

        myChart.setOption(option);
        // 處理點擊事件並且跳轉到相應的百度搜索頁面
        myChart.on('click', function (params) {

            console.log(params);

            if(params.seriesIndex==0){
               


                for(var i=0;i<option.series[0].data.length;i++){
                    option.series[0].data[i].selected=false;
                }
                var selected=params.data;
                selected.selected=true;
                console.log(selected);
                console.log( option.series[0].data[params.dataIndex]);
                option.series[0].data[params.dataIndex]=selected;
              //  option.series[1].data=dataA;
                option.series[1].data=data[params.dataIndex];
                console.log(option);
                myChart.clear();
                myChart.setOption(option);
            }


        });
    });
</script>

  如上,為了點擊切換圖形,網上有人,寫多個option,如何option1,option2……,通過點擊事件的選擇,然后切換option,但是寫那么多option真的很浪費資源,他的很多屬性是重復的,所以我決定更改option的內容,然后達到切換目的。

現在詳細說明:
myChart.on('click', function (params){
   if(params.seriesIndex==0){
               
         
}
});

  如上,設置點擊事件通過seriesIndex的值,判斷是內圈還是外圈,點擊事件發生在內圈,則進行修改;通過dataIndex的值,判斷它是點擊的哪一個塊,然后進行操作。我先預先把數據加載好做成一個數組,然后我們通過選擇的索引,達到匹配數據。如果我們直接復制,不進行myChart.clear();這一步的操作,會出現數據交叉的問題,所以我們需要先清空圖形數據,然后執行其myChart.setOption(option);的方法,執行完之后,圖形重新加載了,會出現,點擊選中的的圖形,沒有選中,所以需要設置選中的圖形,在設置之前,把之前這只選中的圖形,全部設置不選中,故達到目的。

感興趣的朋友可以參考代碼進行實現,如果你有更好的方法實現,不吝賜教。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM