Я пытаюсь сделать слайд-шоу / карусель с круговыми диаграммами. Графики загружаются при загрузке страницы, но отображается только одна.
Проблема в том, что когда я перемещаю слайд-шоу в сторону, чтобы отобразить второй график, вместо рендеринга в его контейнере, он занимает все пространство своего деда. В частности, первый график, который отображает правильный размер, любой другой график неправильный.
Это не использует PHP или что-либо в этом роде, только javascript, html, css и framework canvasjs. Я пытался установить фиксированный размер графиков, но при загрузке следующего он просто игнорирует все установленные мной правила.
Вот код:
/*--------- function that creates the charts ----------*/
function criaGrafico(id, valores, tp) {
setInner(id, '');
if (valores == '') return;
var dados = new Array;
var title = {
text: '',
};
var legenda = {
fontSize: "14",
verticalAlign: "bottom",
horizontalAlign: "left",
fontFamily: "sans-serif",
itemWrap: false
};
dados[0] = {
dataPoints: new Array,
indexLabelFontSize: 10,
indexLabelFontFamily: "sans-serif",
indexLabelFontColor: "darkgrey",
indexLabelLineColor: "darkgrey",
indexLabelPlacement: "outside",
indexLabelMaxWidth: 60,
type: tp,
showInLegend: false, // true mmm
legendMarkerType: 'square'
};
var opc = {
title: title,
legend: legenda,
data: dados
};
var chart = new CanvasJS.Chart(id, opc);
var campo = '';
for (var i = 0, lt = valores.length; i < lt; i++) {
campo = valores[i].split("|");
chart.options.data[0].dataPoints.push({
y: Decimal(campo[0]),
legendText: campo[4],
indexLabel: campo[2],
toolTipContent: campo[1],
color: campo[3]
/*,click:function(e){clicouGrafico(e)}*/
,
cursor: "pointer"
});
}
chart.render();
}
/* function that sets the parameters for the chart */
function graficoProj1() {
var val = new Array();
val[0] = '71|Finalizadas: 87 (71%)|Fin|green|Finalizadas';
val[1] = '9|Direcionadas: 12 (9%)|Dir|orange|Direcionadas';
val[2] = '18|Iniciadas: 22 (18%)|Ini|blue|Iniciadas';
criaGrafico('chart_inov3', val, "pie");
}
#chart_inov3 {
margin-left: 15px;
z-index: 0;
position: relative;
}
<div class="slideshow-container">
<div class="projSlides fade">
<div class='col-d-4 col-t-4'>
<div id='chart_container' style="height: 170px; width: 170px;">
<div id="chart_inov3"></div>
</div>
</div>
<!-- some other info that would stay besides the chart,
in the same parent container -->
</div>
</div>
Затем функция graficoProj1
вызывается при загрузке окна вместе с другими графиками, которые войдут в слайд-шоу, такими как graficoProj2 и graficoProj3.
Результатом должна быть диаграмма, которая остается внутри своего собственного контейнера, например:
Однако, когда я нажимаю кнопку «Далее» вправо, чтобы отобразить следующий слайд, другой график отображается следующим образом:
EDIT:
Я подозреваю, что это может быть связано с тем, как я отображаю контейнеры слайд-шоу, поскольку они сначала устанавливаются как display: none
, а затем становятся display: block
при фокусировке. Это может привести к тому, что диаграммы не будут правильно отображаться в своем контейнере, поскольку они не отображаются. Повторная визуализация может решить эту проблему, но я все еще не могу понять, как это сделать.
Кто-нибудь имеет представление о том, что может быть причиной этого?