高图-动态获取可见的系列名称

Kri*_*fon 3 javascript php highcharts symfony twig

我想制作一个函数,将Highchart实例中的所有可见系列名称动态发送到PHP函数。例如,在此图表中,我想获取以下数组:[Salle,PR]。如果单击Internet,则该系列可见,并且我想获得[Salle,Internet,PR]。

为此,我尝试使用legendItemClick事件并创建一个函数,以检查每个可见系列是否可见以将其添加到数组中,但是我不知道如何使用visible选项来执行此操作。

你有想法吗 ?

截至目前,我没有太多要共享的代码:

plotOptions: {
        series: {
            events: {
                legendItemClick: function(){

                }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

Vla*_*r M 5

如果您像这样保留指向图表的指针:

var ch = Highcharts.chart(_chart_data_);
Run Code Online (Sandbox Code Playgroud)

然后,您可以访问整个图表结构。您将感兴趣的是系列数组。

ch.series[]
Run Code Online (Sandbox Code Playgroud)

它包含所有系列的阵列。可见属性设置为true的系列是当前显示的系列。因此,可能是这样的:

var ch = Highcharts.chart(...

plotOptions: {
        series: {
            events: {
                legendItemClick: function(){
                   ch.series.forEach(function(sr){
                         if(sr.visible){
                            console.log(sr.name, "visible!");
                         }
                   });
                }
            }
        }
    }

...);
Run Code Online (Sandbox Code Playgroud)

但是,您的方法存在一个问题,即在实际图例上单击时,图例的当前操作尚未处理,因此您将看到的输出是当前单击之前的先前状态的输出。

因此,由于这个原因,您可以尝试在事件应用后使用setTimeout获取列表:

         events: {
            legendItemClick: function(){
               setTimeout(
                  function(){ 
                      ch.series.forEach(
                          function(sr){
                              if(sr.visible){
                                 console.log(sr.name, "visible!");
                              }
                           }
                       )
                    },20);
                }
            }
Run Code Online (Sandbox Code Playgroud)

试试看并检查控制台日志:http : //jsfiddle.net/op8142z0/