在引导标签中显示Google图表时出现问题

iAm*_*ric 3 javascript charts google-visualization twitter-bootstrap

我在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>
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明 在此处输入图片说明

Sat*_*mar 5

在实施的chartsgraphs内部的tabs,可能会出现内容调整大小的问题。

这类问题的原因

在“引导程序”选项卡中,当我们切换选项卡时,仅活动选项卡将具有display: block;其余属性的tab-contents应用于display: none;

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

为了解决此问题,我添加了以下CSS,而不是通过使用隐藏标签,而是通过此方法display: none;使用height溢出属性处理的,宽度不会设置为0px


的CSS

.tab-content>.tab-pane {
  height: 1px;
  overflow: hidden;
  display: block;
 visibility: hidden;
}
.tab-content>.active {
  height: auto;
  overflow: auto;
  visibility: visible;
}
Run Code Online (Sandbox Code Playgroud)

谢谢。

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


Whi*_*Hat 3

这是在隐藏容器时绘制图表的结果,
并且选项中没有特定的大小设置

要纠正问题,添加特定尺寸,或等到选项卡可见后再绘制图表...

另外,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']
});
Run Code Online (Sandbox Code Playgroud)