【问题标题】:Hidden elements are not loaded properly after being displayed隐藏元素显示后未正确加载
【发布时间】:2015-11-30 13:57:47
【问题描述】:

我有一个选项卡式切换统计页面,其中有 10 个包含图表的单独选项卡。通过单击每个选项卡,将显示预加载的相应图表。但是,它不会扩展到其容器中。更奇怪的是,当我调整窗口大小时,可见图表会正确显示(我想它会进行一些重新计算)。我应该如何修改我的代码,以便在点击后重新计算,或者对问题有任何建议?

这是我的 jsfiddle: http://jsfiddle.net/g66ut7c6/

<!--BEGIN TABS-->
               <div class="tabbable tabbable-custom">
                  <ul class="nav nav-tabs">
                     <li>
                        <a href="#tab_1_1" data-toggle="tab">
                        1
                        </a>
                     </li>
                     <li>
                        <a href="#tab_1_2" data-toggle="tab">
                        2
                        </a>
                     </li>
                     <li>
                        <a href="#tab_1_3" data-toggle="tab">
                        3
                        </a>
                     </li>
                  </ul>
                  <div class="tab-content">
                     <div class="tab-pane" id="tab_1_1">
                        <div class="scroller">
                           <div class="col-md-6 col-md-offset-3">
                              <div class="portlet light">
                                 <p> Piechart by ülkeler </p>

                              </div>
                           </div>
                        </div>
                     </div>
                     <div class="tab-pane" id="tab_1_2">
                        <div class="scroller">
                           <div class="col-md-6 col-md-offset-3">
                              <div class="portlet light">
                                 <p> Piechart by step dağılımı </p>

                              </div>
                           </div>
                        </div>
                     </div>
                     <div class="tab-pane" id="tab_1_3">
                        <div class="scroller">
                           <div class="col-md-6 col-md-offset-3">
                              <div class="portlet light">
                                 <p> Piechart by hasta sayısı ay </p>

                              </div>
                           </div>
                        </div>
                     </div>
                  </div>
               </div>
               <!--END TABS-->

调整大小之前

调整大小后,大小还可以

我无法在我的 jsfiddle 中包含图表,因为它们包含一些 ruby​​ 代码。

PS:使用 Chartkick 和 Google Charts 绘制图表,使用 MetronicJS 绘制标签。

编辑:默认情况下可见的第一个图表最初是正确显示的,但其他图表则不是。在另一个图表可见时调整窗口大小后,前一个图表再次损坏。

【问题讨论】:

    标签: html css twitter-bootstrap


    【解决方案1】:

    您可以以编程方式触发“调整大小”事件:

    window.dispatchEvent(new Event('resize'));
    

    只需将其附加到显示选项卡的“点击”事件即可。

    在你的情况下:

    $('div.tabbable > ul > li > a').click( function() {
        window.dispatchEvent(new Event('resize'));
    });
    

    如果您的组件没有调整大小以响应事件,您实际上可以调整窗口大小:

    window.resizeTo(width, height);
    

    更新

    如果无法调整窗口大小(请参阅 cmets),您可以尝试在选项卡可见时重新绘制图表。也许通过这种方式,图表能够正确计算它需要适应的尺寸。比如:

    $( 'div.tabbable > ul > li > a' ).click( function() {
        myChart.draw( myData );
    });
    

    希望对你有帮助!

    【讨论】:

    • 不幸的是没有用。我什至无法在 chrome 中调整窗口大小,我想某些浏览器(如 Chrome、Firefox 等)不支持它,因此无法以编程方式调整大小。
    • 感谢您的评论@Burak,我现在在 MDN 中阅读了有关它的信息,确实有 restrictions。实际上,我无法让它在 OP 的小提琴上工作。虽然我可以使用window.dispatchEvent(new Event('resize')) 发送事件,但我不确定它何时也会使图表调整大小。
    • 我不知道为什么它不调整图表的大小,看起来它对它们根本没有影响。感谢您的回复顺便说一句^_^
    • 当你点击标签而不是页面加载时如何绘制它们?不知道你有没有看到更新的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    • 2015-01-02
    相关资源
    最近更新 更多