我正在使用带选项卡的 Twitter Bootstrap。 我有多个选项卡和每个选项卡中的图表。 在浏览器调整大小时,未在当前活动选项卡中的图表不会被调整大小。 实际上,它看起来很有趣,有一条细细的线。 当前活动选项卡运行正常。 有人遇到过这个问题吗?有没有解决方法?
我正在使用带选项卡的 Twitter Bootstrap。 我有多个选项卡和每个选项卡中的图表。 在浏览器调整大小时,未在当前活动选项卡中的图表不会被调整大小。 实际上,它看起来很有趣,有一条细细的线。 当前活动选项卡运行正常。 有人遇到过这个问题吗?有没有解决方法?
这是一个工作示例:
http://codepen.io/colinsteinmann/pen/BlGfE
基本上,在每次点击选项卡时,会对每个图表调用 .reflow() 函数。这样,当容器可见时,图表就会根据新的尺寸重新绘制。
这是最重要的代码片段:
// 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
});
})
$("[data-highcharts-chart]").each(function () {
var highChart = Highcharts.charts[$(this).data('highchartsChart')];
var highChartCont = $(highChart.container).parent();
highChart.setSize(highChartCont.width(), highChartCont.height());
highChart.hasUserSize = undefined;
});
当图表获得焦点时,请调用此函数以确保它被正确地调整大小。
我花了一些时间找到了答案。这让我疯狂,所以我想与大家分享,因为这里的任何方法都对我没用。
将以下内容添加到您的CSS中
.tab-content > .tab-pane,
.pill-content > .pill-pane {
display: block;
height: 0;
overflow-y: hidden;
}
.tab-content > .active,
.pill-content > .active {
height: auto;
}
欲了解更多详情,请访问我发现解决方案的页面: https://jonpolygon.com/bootstrap-tabs-100-percent-width-charts/
在所有选项卡内的highcharts容器中添加class="chart"
。
添加以下jQuery代码:
jQuery(document).on( 'shown.bs.tab', 'a[data-toggle="tab"]', function () {
$( '.chart' ).each(function() {
$(this).highcharts().reflow();
});
})
我曾经遇到过类似的问题,后来发现最好的方法是直到选项卡显示时再加载图表。所以在选项卡显示事件中,我会快速加载图表(但仅加载一次)。
我刚刚使用以下方法解决了这个问题。使用的是Bootstrap版本3.3.5。
我把这个留在这里,因为当我一开始谷歌这个问题时,这个链接出现了。希望它有所帮助。
$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
$(e.target.hash).highcharts().reflow();
});
HTML
<!-- Nav tabs -->
<ul class="nav nav-pills nav-justified" role="tablist" id="taks-tabs">
<li role="presentation" class="active"><a href="#taks_met_std" aria-controls="taks_met_std" role="tab" data-toggle="tab">Met Standard</a></li>
<li role="presentation"><a href="#taks_comm_perf" aria-controls="taks_comm_perf" role="tab" data-toggle="tab">Commended Performance</a></li>
<li role="presentation"><a href="#taks_m_met_std" aria-controls="taks_m_met_std" role="tab" data-toggle="tab">TAKS-M Met Standard</a></li>
</ul>
<!-- Tab panes -->
<div class="tab-content">
<div role="tabpanel" class="tab-pane active" id="taks_met_std"></div>
<div role="tabpanel" class="tab-pane" id="taks_comm_perf"></div>
<div role="tabpanel" class="tab-pane" id="taks_m_met_std"></div>
</div>
$('#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
},
我有2个选项卡,遇到了同样的问题。 我只改变了Druska的2行代码,然后它就可以工作了。
function anyname() {
$("[data-highcharts-chart]").each(function () {
var highChart = Highcharts.charts[$(this).data('highchartsChart')];
var highChartCont = $(highChart.container).parent();
highChart.reflow();
});
}
并且在您的HTML标签代码中添加一个onclick事件,如下所示:
<input type="radio" id="tab1_1" checked onclick="anyname();" >
所以这个问题有点老了,但对于任何遇到此类问题的人来说,我在使用Bootstrap选项卡显示高级图表大小时也遇到过类似的问题。最终我想到的解决方案是仅仅延迟100毫秒(使用setTimeout()函数)来创建图表。
setTimeout(function() {
drawBarChart();
}, 100);