Highcharts does not resize charts inside tabs

2019-03-15 10:48发布

I am using twitter bootstrap with tabs. I have multiple tabs and charts inside each tab. Upon browser resize, charts that are not on the current active tab do not get resized. Infact, it looks kind of funny with a thin bar. The current active tab works fine. Has anyone seen this issue and are there any workarounds ?

标签: highcharts
8条回答
淡お忘
2楼-- · 2019-03-15 10:57

Here is a working example:

http://codepen.io/colinsteinmann/pen/BlGfE

Basically the .reflow() function is called on each chart when a tab is clicked. That way the chart gets redrawn based on the new dimensions which are applied to the container when it becomes visible.

This is the most important snippet of code:

// fix dimensions of chart that was in a hidden element
jQuery(document).on( 'shown.bs.tab', 'a[data-toggle="tab"]', function (e) { // on tab selection event
    jQuery( ".contains-chart" ).each(function() { // target each element with the .contains-chart class
        var chart = jQuery(this).highcharts(); // target the chart itself
        chart.reflow() // reflow that chart
    });
})
查看更多
乱世女痞
3楼-- · 2019-03-15 11:00

add class="chart" to all highcharts containers inside tabs.

add this jQuery code:

jQuery(document).on( 'shown.bs.tab', 'a[data-toggle="tab"]', function () { 
    $( '.chart' ).each(function() { 
        $(this).highcharts().reflow();
    });
})
查看更多
男人必须洒脱
4楼-- · 2019-03-15 11:05

So this is a bit old, but for anyone stumbling across this, I was having a similar issue with the highchart sizes being incorrect in a bootstrap tabbed display. The solution I came up with was to just delay creating the chart by 100ms using setTimeout().

setTimeout(function() {
    drawBarChart();
}, 100);

Note: drawBarChart is a custom function I created to generate the charts I needed. The issue (at least in my case) seemed to be that the chart was being created before (or at the same time) as the container and was therefore choosing some default width instead of the width of the container.

查看更多
聊天终结者
5楼-- · 2019-03-15 11:13

i fix this problem with the next code.

        $('#yourDivChart').highcharts({
            chart: {
                type: data.EjeX.Tipo,
                //width: width,
                //height: height,
                options3d: {
                    enabled: true,
                    alpha: 15,
                    beta: 15,
                    viewDistance: 25,
                    depth: 40
                },
                width: $('#DivContainerWithYourTabs').width() - 150
            },

in my case is a partial "_partialDetalleProyecto"

I hope works you.

查看更多
欢心
6楼-- · 2019-03-15 11:14

I found the answer after looking for sometime. This was driving me crazy so I want to share it with you all since nothing here worked for me.

Add this to your CSS

.tab-content > .tab-pane,
.pill-content > .pill-pane {
    display: block;     
    height: 0;          
    overflow-y: hidden; 
}

.tab-content > .active,
.pill-content > .active {
    height: auto;       
} 

For more details visit the page I found the solution at https://jonpolygon.com/bootstrap-tabs-100-percent-width-charts/

查看更多
smile是对你的礼貌
7楼-- · 2019-03-15 11:16

I had a similar issue and I found that the best thing was not to load the chart until the tab was shown. So in the tab shown event I was quickly loading the chart (but only once)

查看更多
登录 后发表回答