【问题标题】:Drawing Google Chart in hidden elements在隐藏元素中绘制谷歌图表
【发布时间】:2014-05-12 19:05:41
【问题描述】:

尝试在隐藏元素中渲染 Google 图表,但并不走运。小提琴下面有一个带有引导选项卡的示例:

Fiddle

在这里得到了 Andrew 的一些帮助:How to draw a google chart when a tab is showed?,但现在图表在我与之交互的任何时候都会重新渲染(例如使用范围过滤器)。

HTML代码是:

<div class="container">
    <div class="tabbable">
        <ul class="nav nav-tabs" data-tabs="tabs">
            <li class="active">
                <a href="#A" data-toggle="tab">Tab A</a>
            </li>
            <li class="">
               <a href="#B" data-toggle="tab">Tab B</a>
            </li>
            <li class="">
                <a href="#C" data-toggle="tab">Tab C</a>
            </li>
        </ul>
        <div class="tab-content">
            <div class="tab-pane active" id="A">
                <div id='ChartA'></div>
            </div>
            <div class="tab-pane" id="B">
                <div id='ChartB'></div>
            </div>
            <div class="tab-pane" id="C">
                <div id='ChartC'></div>
            </div>
        </div>
    </div>
</div>

所有的JS代码都在小提琴中。

【问题讨论】:

  • 嗯...您需要以某种方式挂钩到 Bootstrap 的选项卡事件。我会调查他们,看看我是否能解决这个问题。
  • 感谢您抽出宝贵时间安德鲁!

标签: jquery twitter-bootstrap google-visualization hidden


【解决方案1】:

一个简单的例子,我在这里所做的就是在每个选项卡触发选项卡显示事件时重新加载图表。我确信有一个更优雅的解决方案,但它可以完成工作。

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

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

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

【讨论】:

  • 谢谢!有用。如果我继续单击选项卡,我发现这很奇怪,导航变得越来越慢。但它确实起到了作用。再次感谢。
  • 可能是内存泄漏。我会进一步阅读文档,看看是否有比一直简单地调用google.load 更好的方法来完成这项工作。您可能需要为关闭选项卡时添加额外的事件回调并删除所有旧的图形引用。
  • 看看this ticket,底部的回复建议调用clearChart()函数。
【解决方案2】:

就这么简单:

$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
  window.dispatchEvent(new Event('resize'));
});

【讨论】:

  • 在你的 js 文件中
  • 谢谢,这正是我要找的。重要提示:jquery 绑定应该在 选项卡的 html 代码之后定义。我的方式:$('a[data-toggle="tab"]').click(() =&gt; window.dispatchEvent(new Event('resize')))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-29
  • 2018-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-08
  • 1970-01-01
相关资源
最近更新 更多