问题 带有Bootstrap标签的Google Chart


我在带有Bootstrap选项卡的页面中使用了两个(或更多)Google图表。根据我的标签导航,图表会失去默认(?)大小的大小。 Bellow是一个简化的测试用例,其中包含查看问题的步骤:

https://jsfiddle.net/73o0rfqe/

如何重现:

情况#1:

  • 点击  标签。仅在选项卡单击后,图表才会调整为实际大小。我正在寻找一种在页面加载后(在选项卡点击之前)渲染它的方法。

情况#2:

  • 点击  选项卡,单击 TWOC 选项卡,单击  选项卡,单击  选项卡,单击 TwoA 标签。现在图表失去了实际尺寸。点击  选项卡,单击  标签。现在,图表再次以实际尺寸呈现。

这部分代码:

$("a[href='#One']").on('shown.bs.tab', function (e) {
    google.load('visualization', '1', {packages: ['corechart'], callback: drawChart});
    clearChart();
}); 

我正在尝试使用它,但它不能像它应该的那样工作。任何帮助都会有所帮助。

PS。:任何有关优化此代码的建议都会有所帮助。谢谢。


3159
2018-05-26 16:10


起源



答案:


问题在于您重绘了图表

$("a[href='#One']").on('shown.bs.tab', function (e) {
    google.load('visualization', '1', {packages: ['corechart'], callback: drawChart});
    clearChart();
}); 

当你用标签改变时。我不知道为什么当你按照你写的方式进行绘制时,它的绘制大小不正确,但我从未使用过bootstrap。

(作为旁注,我不明白为什么你在标签更改上加载谷歌包,这会导致谷歌服务器的大量负载。有点像

$("a[href='#One']").on('shown.bs.tab', function (e) {
    drawChart();
}); 

就够了。)

一个解决方案是在页面加载时渲染两个图表,然后用它们完成,检查 这个小提琴 你会发现它有效。


8
2018-05-27 06:29



在哪里放这个代码? - joun
@joun检查 这个答案... - WhiteHat


答案:


问题在于您重绘了图表

$("a[href='#One']").on('shown.bs.tab', function (e) {
    google.load('visualization', '1', {packages: ['corechart'], callback: drawChart});
    clearChart();
}); 

当你用标签改变时。我不知道为什么当你按照你写的方式进行绘制时,它的绘制大小不正确,但我从未使用过bootstrap。

(作为旁注,我不明白为什么你在标签更改上加载谷歌包,这会导致谷歌服务器的大量负载。有点像

$("a[href='#One']").on('shown.bs.tab', function (e) {
    drawChart();
}); 

就够了。)

一个解决方案是在页面加载时渲染两个图表,然后用它们完成,检查 这个小提琴 你会发现它有效。


8
2018-05-27 06:29



在哪里放这个代码? - joun
@joun检查 这个答案... - WhiteHat


在实施的同时 chartsgraphs 在 - 的里面 tabs,可能会发生内容调整大小问题。

此类问题的原因

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

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

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


CSS

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

我已经从你的代码中分叉你的代码jsfiddle链接给出的问题(https://jsfiddle.net/73o0rfqe/)。

这是具有更新代码的链接(即,仅添加了上面给出的CSS)

https://jsfiddle.net/swasatz/28qttaqb/2/

查看小提琴希望这可能对您有所帮助

谢谢。

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


5
2017-10-24 14:21





显然这是一个CSS问题。这是解决我遇到的问题的解决方案,将图表加载到隐藏的标签中:

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

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

1
2018-02-08 22:58



解释你的答案 - neophyte
这管用吗?我尝试这个但没有任何影响。 - joun