Highcharts - 动态设置列宽

时间:2015-02-23 09:55:39

标签: highcharts

我想创建一个柱形图,其中第一列的宽度为第二列的50%。 我的想法是读取load - 事件第二列的宽度,计算宽度并将其设置为第一列;同样适用于redraw - 事件。​​

这在第一次加载图表之后有效,但是当我想在重绘事件中更改列宽时我就陷入困境:当调整窗口大小时,我得到的计算列宽为“最后“调整大小,而不是当前的。”

这个小提琴显示了问题: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 个答案:

答案 0 :(得分:1)

redraw 事件被触发之后,您的功能被称为,这就是为什么您获得next to last宽度的原因。这是显示函数调用时间的DEMO

你可以做的是在该函数中再次调用重绘,除了那个特定的系列,它不会调用相同的处理程序并导致循环。以下是您可以做的事情:

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

这就是工作fiddle