在引导标签中显示Google Chart的问题

时间:2017-04-13 21:23:45

标签: javascript twitter-bootstrap charts google-visualization

我在Boostrap标签中显示Google图表时遇到问题。 我有两个标签,每个标签都有一个Google图表。在第一个中,图表被正确显示,但在第二个图表中,图表很小并且被压缩。 我不明白为什么..

这是我的代码:

<div class="tab-pane active" id="player">
    <h3>Players' resources</h3>
    <div id="totalPlayerChart" style="height: 500px;"></div>
</div>

<div class="tab-pane" id="producer">
    <h3>Producers' resources</h3>
    <div id="totalProducerChart" style="height: 500px;"></div>
</div>

<script type="text/javascript">
    google.charts.load('current', {'packages':['corechart']});
    google.charts.setOnLoadCallback(drawTotalPlayerChart);
    google.charts.setOnLoadCallback(drawTotalProducerChart);

    function drawTotalPlayerChart() {
        [...]
        var chart = new google.visualization.LineChart(document.getElementById('totalPlayerChart'));
        chart.draw(data, options);
    }

    function drawTotalProducerChart() {
        [...]
        var chart = new google.visualization.LineChart(document.getElementById('totalProducerChart'));
        chart.draw(data, options);
    }
</script>

enter image description here enter image description here

3 个答案:

答案 0 :(得分:4)

charts内实施graphstabs时,可能会出现内容调整大小问题。

此类问题的原因

在Bootstrap选项卡中,当我们切换选项卡时,只有活动选项卡的属性display: block; tab-contents的其余部分将应用于display: none;

如果div元素具有属性display: none;,则宽度也被视为 0px ,这是此问题的主要原因。

要覆盖此问题,我添加了以下 CSS ,而不是使用display: none;隐藏标签,而是使用高度&amp;处理此方法的溢出属性宽度不会设置为 0px

CSS

.tab-content>.tab-pane {
  height: 1px;
  overflow: hidden;
  display: block;
 visibility: hidden;
}
.tab-content>.active {
  height: auto;
  overflow: auto;
  visibility: visible;
}

感谢。

注意:这是使用CSS解决此问题的方法之一。

答案 1 :(得分:1)

这是在隐藏容器时绘制图表的结果 当选项

中没有特定的尺寸设置时

更正问题,添加特定尺寸,或等到标签显示后再绘制图表...

另外,setOnLoadCallback每页加载只需要调用一次

它也可以放在load声明

建议将类似设置为以下代码段

google.charts.load('current', {
  callback: function () {
    $('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
        switch ($(e.target).html()) {
          case 'Players':
            drawTotalPlayerChart();
            break;

          case 'Producers':
            drawTotalProducerChart();
            break;
        }
    });

    function drawTotalPlayerChart() {
      [...]
      var chart = new google.visualization.LineChart(document.getElementById('totalPlayerChart'));
      chart.draw(data, options);
    }

    function drawTotalProducerChart() {
      [...]
      var chart = new google.visualization.LineChart(document.getElementById('totalProducerChart'));
      chart.draw(data, options);
    }

    // draw chart on initial tab
    drawTotalPlayerChart();
  },
  packages: ['corechart']
});

答案 2 :(得分:0)

您需要在shown.bs.tab

上初始化图表

以下是其他人的bootply演示,但这是Google Map(同样适用的方法):http://www.bootply.com/102241