2015-02-23 5 views
0

Я хочу создать диаграмму столбцов, где первый столбец имеет 50% ширины второго столбца. Моя идея состояла в том, чтобы прочитать ширину второго столбца на load -event, рассчитать ширину и установить ее в первый столбец; то же самое для redraw -event.Highcharts - динамическая установка ширины столбца

Это работает после того, как диаграмма загружена в первый раз, но я застрял, когда хочу изменить ширину столбца в событии перерисовывания: при изменении размера окна я получаю рассчитанную ширину столбца "next для последнего "изменения размера, а не текущего.

Эта скрипку показывает проблему: http://jsfiddle.net/u8a0oo0d/

$(function() { 
    $('#container').highcharts({ 
     xAxis: { 
      categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] 
     }, 
     chart: { 
      events: { 
       load: function() { 
        this.series[0].options.pointWidth = this.series[0].barW/2; 
        this.series[0].update(this.series[0].options); 
       }, 
       redraw: function(event) { 
        console.log('redraw', this.series[0]); 
        this.series[0].options.pointWidth = this.series[1].barW/2; 
        this.series[0].isDirty = true; 
        //this.series[0].update(this.series[0].options); 
       } 
      } 
     }, 
     series: [{ 
      type: 'column', 
      //pointWidth: 10, 
      data: [29.9, 71.5, 126.4, 149.2, 114.0, 126.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4] 
     },{ 
      data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4], 
      type: 'column' 
     }] 
    }); 
}); 
+1

Я бы также попытался использовать 'pointPadding' вместо использования событий: http://jsfiddle.net/u8a0oo0d/3/ –

ответ

1

Ваша функция называется после событие redraw запускаемое, именно поэтому вы получаете next to last ширину. Вот DEMO для отображения времени вызова функции.

То, что вы можете сделать, это снова вызвать повторную разметку в этой функции, за исключением только той конкретной серии, которая не вызывает тот же обработчик и вызывает цикл. Вот что вы можете сделать:

redraw: function(event) { 
      this.series[0].options.pointWidth = this.series[1].barW/2; 
      this.series[0].redraw(); 
     } 

А вот рабочий fiddle.

+0

Отлично, не заметил, что вы можете перерисовать определенную серию. Спасибо! – user2345998

Смежные вопросы