HighChart скрыть другие серии на легенда клика - PullRequest
0 голосов
/ 06 февраля 2019

Мне нужно скрыть другие серии в HighChart (Линейный график) при нажатии на легенду, поэтому я попробовал кое-что, что в настоящее время скрывает другие линии серии, но когда я пытаюсь щелкнуть ту же легенду, она снова показывает другие серии, чтоневерно.

$(function () {
    var chart;

    $(document).ready(function() {

        chart = new Highcharts.Chart({

            chart: {

                renderTo: 'container',

                type: 'line',

                marginRight: 130,

                marginBottom: 25

            },
            plotOptions: {
        line: {

                events: {
                    legendItemClick: function () {
                        chart.yAxis[0].addPlotLine({
                        value : 7.5,
                        color : 'green',
                        dashStyle : 'shortdash',
                        width : 2,
                        label : {
                            text : 'My PlotLine'
                        }
                    });

                     if (!this.visible)
                     return true;

                    var seriesIndex = this.index;
                    var series = this.chart.series;

                    for (var i = 0; i < series.length; i++)
                    {
                        if (series[i].index != seriesIndex)
                        {

                            series[i].visible ? series[i].hide() :                                                 series[i].show();
                        } 
                    }
                     return false;
                        //return false; // <== returning false will cancel the default action
                    }
                }
            ,
            showInLegend: true
        }
    },                
            title: {

                text: 'Monthly Average Temperature',

                x: -20 //center

            },

            subtitle: {

                text: 'Source: WorldClimate.com',

                x: -20

            },

            xAxis: {

                categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',

                    'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']

            },

            yAxis: {

                title: {

                    text: 'Temperature (°C)'

                },

                plotLines: [{

                    value: 0,

                    width: 1,

                    color: '#808080'

                }]

            },

            tooltip: {

                formatter: function() {

                        return '<b>'+ this.series.name +'</b><br/>'+

                        this.x +': '+ this.y +'°C';

                }

            },

            legend: {

                layout: 'vertical',

                align: 'right',

                verticalAlign: 'top',

                x: -10,

                y: 100,

                borderWidth: 0

            },


            series: [{

                name: 'Tokyo',

                data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6]

            }, {

                name: 'New York',

                data: [-0.2, 0.8, 5.7, 11.3, 17.0, 22.0, 24.8, 24.1, 20.1, 14.1, 8.6, 2.5]

            }, {

                name: 'Berlin',

                data: [-0.9, 0.6, 3.5, 8.4, 13.5, 17.0, 18.6, 17.9, 14.3, 9.0, 3.9, 1.0]

            }, {

                name: 'London',

                data: [3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8]

            }]

        });

    });


});

Проще говоря, когда я нажимаю легенду, она должна открывать только строку озабоченности,

Пример Fiddle

1 Ответ

0 голосов
/ 06 февраля 2019

Вы можете решить его по своей спецификации следующим образом:

var seriesIndex = this.index;
var series = this.chart.series;
if (this.visible && this.chart.restIsHidden) {
  for (var i = 0; i < series.length; i++) {
    if (series[i].index != seriesIndex) {
      series[i].show();
    }
  }
  this.chart.restIsHidden = false;
} else {
  for (var i = 0; i < series.length; i++) {
    if (series[i].index != seriesIndex) {
      series[i].hide();
    }
  }
  this.show()
  this.chart.restIsHidden = true;
}
return false;

Это проверяет, является ли выбранный элемент видимым, а остальные скрыты, если это так, то он должен показать все.В противном случае он должен скрывать все, кроме нажатого элемента.Я использовал пользовательское значение bool для отслеживания того, скрыто ли остальное или нет.

Рабочий пример JSFiddle: http://jsfiddle.net/ewolden/93mLoc1f/14/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...