2015-09-04 3 views
5

У меня есть таблица статистики с вкладками, в которой есть 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--> 

Перед размер Before resize

После изменения размера, размер хорошо enter image description here

я не мог включать диаграммы в моем jsfiddle, потому что они содержат некоторый рубиновый код.

PS: Использование карт Chartkick и Google для рисования диаграмм и MetronicJS для вкладок.

Редактировать: первая диаграмма, которая видна по умолчанию, отображается правильно, но другие нет. После изменения размера окна, когда отображается другой график, предыдущий снова разбивается.

ответ

0

Вы можете программно огонь «Изменить размер» событие:

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

Просто приложите его к событию «нажмите кнопку», которая показывает вкладку.

В вашем случае:

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

Если компонент не изменяет размер, как реагировать на событие, вы могли бы на самом деле изменить размер окна с:

window.resizeTo(width, height); 

UPDATE:

Если изменить размер окна невозможно (см. Комментарии), вы можете попытаться перерисовать диаграмму, когда вкладка станет видимой. Может быть, таким образом диаграмма может рассчитать правильно размеры, необходимые, чтобы вписаться в что-то вроде:.

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

Надеется, что это помогает!

+0

К сожалению, это бесполезно. Я даже не могу изменить размер окна в chrome, я полагаю, что он не поддерживается некоторыми браузерами, такими как Chrome, Firefox и т. Д., Поэтому изменение размера не может быть запущено программно. –

+0

Спасибо за ваш комментарий @Burak, я читал сейчас в MDN об этом, и это правда, что есть [ограничения] (https://developer.mozilla.org/en-US/docs/Web/API/Window/ resizeTo). На самом деле я не собираюсь работать на скрипке OP. Я мог бы отправить событие с помощью 'window.dispatchEvent (новое событие ('resize'))', хотя, но я не уверен, когда он изменит размер диаграммы. – David

+0

Я не знаю, почему это не изменяет размеры диаграмм, похоже, что на них совсем не влияет. Спасибо за ответы btw^_^ –

Смежные вопросы