Я пытаюсь использовать ChartsJS в системе табуляции. Первый график на первой вкладке отображается, но последующие диаграммы не отображаются.ChartJS диаграммы не генерируются в пределах вкладок
Я считаю, что это связано с тем, что вкладки имеют display:none
, поэтому, когда диаграммы сначала генерируются, они создаются в div с нулевыми размерами.
Это устраняет проблему, но ломает вкладки:
.vertical-nav>div.tab-content {
display: block !important;
}
Имея это в виду, я перепробовал все виды способов регенерации чарты после вкладка открыта, или силы display:block
непосредственно перед порождающая диаграмма. Ничего не работает.
Вот моя попытка регенерировать диаграммы:
jQuery(document).ready(function() {
jQuery('.vertical-nav ul li span').click(function(){
// Target the canvas within the correct tab
var tabIndex = jQuery(this).parent().index();
var canvasID = jQuery('.vertical-nav .tab-content:eq(' + tabIndex + ') canvas').attr('id');
theChart = charts[canvasID].chart;
builtChart = charts[canvasID].builtChart;
// Destroy all of the charts so that we can rebuild them
for (var key in charts) {
if (charts.hasOwnProperty(key)) {
charts[key].builtChart.destroy();
}
}
// get the chart data and options from the charts object
newData = charts[canvasID].data;
newOptions = charts[canvasID].options;
// create the new chart
newChart = document.getElementById(canvasID).getContext("2d");
new Chart(newChart).Line(newData, newOptions);
});
})
Сайт постановка: http://telcomplusplc.uberleaf.com/company/?tab=our-growth
Я даже попытался установить тайм-аут, чтобы задержать поколение диаграммы, пока не появится вкладка, но не удачи.
В приведенном выше URL-адресе вы можете видеть, что первый график генерирует и регенерирует, как следует. Остальные из них не имеют (по-видимому, потому, что у них есть display:none
div первого поколения).
Любая помощь очень ценится. Приятно дать дополнительную информацию, если необходимо.
Update
При изменении размеров окна, график перерисовывается. Вот код, который (в chart.js):
// Attach global event to resize each chart instance when the browser resizes
helpers.addEvent(window, "resize", (function(){
// Basic debounce of resize function so it doesn't hurt performance when resizing browser.
var timeout;
return function(){
clearTimeout(timeout);
timeout = setTimeout(function(){
each(Chart.instances,function(instance){
// If the responsive flag is set in the chart instance config
// Cascade the resize event down to the chart.
if (instance.options.responsive){
instance.resize(instance.render, true);
}
});
}, 50);
};
})());
Я думаю, что мне нужно, чтобы иметь возможность стрелять, что из функции мыши. Я пробовал неудачу, мои навыки JS не так хороши.
В вашем коде вы используете переменную 'newChart' в этой строке' new Chart (newChart) .Line (newData, newOptions); 'но я не нахожу его в вашем коде, 'метод в документации диаграмм http://www.chartjs.org/docs/#line-chart-prototype-methods –