如何在用户单击饼图时隐藏该区域的其余部分?

时间:2015-05-30 04:33:19

标签: javascript jquery html css highcharts

我有饼图表示用户位置,如下图图1 ,我已成功使表示有效,但我怎样才能让其他用户单击任何特定扇区时隐藏为图2

图1

enter image description here

图2:

enter image description here

Javascript:

$(function () {
    $('#container').highcharts({
        chart: {
            plotBackgroundColor: null,
            plotBorderWidth: null,
            plotShadow: false
        },
        title: {
            text: 'users location'
        },
        tooltip: {
            pointFormat: '{series.name}: <b>{point.percentage:.1f}%</b>'
        },
        plotOptions: {
            pie: {
                allowPointSelect: true,
                cursor: 'pointer',
                dataLabels: {
                    enabled: true,
                    format: '<b>{point.name}</b>: {point.percentage:.1f} %',
                    style: {
                        color: (Highcharts.theme && Highcharts.theme.contrastTextColor) || 'black'
                    }
                }
            }
        },
        series: [{
            type: 'pie',
            name: 'Browser share',
            data: [
                ['Africa',   45.0],
                ['Asia',       26.8],
                {
                    name: 'Australia',
                    y: 12.8,
                    sliced: true,
                    selected: true
                },
                ['Europe',    8.5],
                ['North America',     6.2],
                ['Others',   0.7]
            ]
        }]
    });
});

Fiddle Link

2 个答案:

答案 0 :(得分:3)

您可以使用 plotOptions.series.point.events.click 功能在点击切片后告诉图表确切的操作:

series: {
    point: {
        events: {
            click: function () {
                var index = this.x;
                $('.highcharts-series-group g path').toggle();
                $('.highcharts-series-group g path:nth-child(' + (index+1) + ')').toggle();

                $('.highcharts-data-labels path').toggle();
                $('.highcharts-data-labels path:nth-child(' + (index+1) + ')').toggle();

                $('.highcharts-data-labels g').toggle();
                $($('.highcharts-data-labels g').get(index)).toggle();
            }
        }
    }
}

前两个切换用于切片本身。 $('.highcharts-series-group g path') 是指图表中的所有彩色切片,我通过添加 :nth-child 更改了刚刚点击的一个用户。

第二对切换用于从连接数据标签的切片中出来的线。第三对用于数据标签

这里是DEMO

答案 1 :(得分:2)

纯粹的Highcharts中的例子。作为另一个答案,使用pie.point.events.click处理程序来隐藏/显示元素:http://jsfiddle.net/5oLmj00L/8/

            point: {
                events: {
                    click: function() {
                        var _self = this,
                            undef,
                            method = _self.clicked ? "show" : "hide";

                        Highcharts.each(this.series.data, function(p, i) {
                            if(p !== _self) {
                                // hide/show slice
                                if(p.graphic) {
                                    p.graphic[method]();
                                }
                                // hide/show label
                                if(p.dataLabel) {
                                     p.dataLabel[method]();   
                                }
                                // hide/show connector
                                if(p.connector) {
                                     p.connector[method]();
                                }
                            }
                        });
                        // set flag for next click:
                        _self.clicked = _self.clicked !== undef ? !_self.clicked : true;
                    }    
                }
            }