2014-10-12 8 views
0

Я использую Highcharts, и я пытаюсь заставить легенду исчезнуть и появиться с помощью кнопки, чтобы сохранить некоторую экранную недвижимость.Сделать легенду скрытой в Highcharts

Я пробовал все, что мог придумать, и все, что мне удалось сделать, - заставить SVG легенды скрываться и показывать с помощью chart.legend.[group, nav, container].hide(), но пустое пространство, которое принимает легенда, никогда не исчезает. Я даже попытался удалить легенду DOM элемент, но диаграмма не будет изменять размер (даже звонки chart.reflow() не помогает

Смотрите здесь:. http://jsfiddle.net/zbzzn/q83h5g4z/1/

Есть ли способ сделать легенду исчезает и оплавление диаграммы ? так что легенда белое пространство уходит

ответ

0

мне удалось сделать хак вокруг него, который работает:

http://jsfiddle.net/q83h5g4z/4/

Я действительно надеюсь, что есть Аноф er сделать это без взлома.

if (!isVisible) { 
     originalLegendHeight = legend.legendHeight; 
     legend.options.maxHeight = -1; //0 doesn't work :(because someone did "if (maxHeight)" instead of "if (maxHeight === null)" 
     $('#container').height($('#container').height()-legend.legendHeight); 
     chart.redraw(); 
     chart.reflow(); 
    } else { 
     legend.options.maxHeight = null; 
     $('#container').height($('#container').height()+originalLegendHeight); 
     chart.redraw(); 
     chart.reflow(); 
    } 
0

Смотреть это решение:

http://jsfiddle.net/3Bh7b/73/

var legend = chart.legend; 

      if(legend.display) { 
       legend.group.hide(); 
       legend.display = false; 
      } else { 

       legend.group.show(); 
       legend.display = true; 
      } 
+0

Я начал испытания из этого решения (см описание вопроса), но это не сработало, потому что это не изменить размер диаграммы и не скрывает группу нав когда он появится. – Buzzy

+0

Действительно, вы правы, я не вижу этих требований. –

+0

У вас есть другое решение, отличное от ответа в моем ответе? Могу ли я поместить эту функцию в качестве расширенного запроса на HighCharts GitHub? – Buzzy

0

Окончательное решение я Достигнутый (где legendVisible определяет видимость легенды):

  var legendElement = $(chart.container).find('.highcharts-legend'); 
      if (legendElement.length > 0) { 
       if (chart.legend.options.enabled && legendVisible) { 
        legendElement.show(); 
        chart.legend.options.maxHeight = chart.legend.options.originalMaxHeight || null; 
        chart.reflow(); 
       } else { 
        legendElement.hide(); 
        chart.legend.options.originalMaxHeight = chart.legend.options.maxHeight; 
        chart.legend.options.maxHeight = -1; 
        chart.reflow(); 
       } 
      } 
1

Вот мой эскиз для метода переключения, который находится непосредственно на прототипе Legend. Он позволяет избежать изменения ширины и высоты контейнера.

Highcharts.Legend.prototype.toggle = function() { 
    if (this.display) { 
     this.group.hide(); 
    } else { 
     this.group.show(); 
    } 
    this.display = !this.display; 
    this.chart.isDirtyBox = true; 
    this.chart.redraw(); 
}; 

Живая демонстрация на http://jsfiddle.net/highcharts/3Bh7b/76/

+0

Спасибо за решение, у него все еще есть проблема с навигационной группой: http : //jsfiddle.net/3Bh7b/79/ – Buzzy

+0

И я забыл упомянуть, что иногда у меня есть серия, добавленная во время выполнения, поэтому, даже если я скрою эту навигационную группу, она снова появится, если вы добавите еще одну серию. – Buzzy