JavaScript не может вычислить ширину, пока блок имеет display: none;
Так как скрипт не может вычислить ширину, он принимает значение по умолчанию 400px
width.
Чтобы устранить эту проблему, у вас естьнесколько вариантов:
1) не использовать display: none
, но использовать: opacity: 0
или visibility: hidden
2) нарисовать диаграмму, когда блок станет видимым (display: block
),так что вычисления будут возможны.
Если вы вызываете Draw Graph непосредственно перед отображением элемента, то он работает хорошо.Это потому, что граф фактически рисуется, когда блок уже имеет display: block
, поскольку граф рисуется асинхронно, с использованием обратного вызова.
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript">
function drawGraph() {
google.charts.load("current", {packages:['corechart']});
google.charts.setOnLoadCallback(drawChart);
function drawChart() {
var data = google.visualization.arrayToDataTable([
["test", "val", { role: "style" } ],
["test", 21.45, "color: red"]
]);
var options = {
width: '100%'
};
var view = new google.visualization.DataView(data);
var chart = new google.visualization.ColumnChart(document.getElementById("columnchart"));
chart.draw(view,options);
}
}
function test() {
drawGraph();
document.getElementById("columnchart").style.display = "block";
}
</script>
<div onclick="javascript:test()"> click me </div>
<div id="columnchart" style="width: 100%; height: 300px; display:none;"></div>