【发布时间】:2014-10-03 11:48:09
【问题描述】:
我正在使用 bootstrap 的选项卡,每个选项卡内都有 chartjs 图表。
发生的一个问题是图形画布不会在我调整浏览器窗口大小之前被绘制。最新的 Chrome 和 Firefox 都在发生这种情况。
我一直在尝试不同的解决方案,例如在更改选项卡后绘制图表但没有结果。
不幸的是,我无法在 jsfiddle 中复制问题,不知何故它似乎在那里工作。但是除了 html5 样板之外,还有几乎所有的代码。
有谁知道为什么会发生这种行为?谢谢!
/**
* ChartJS using JSON data and moment.js for time display
* Code is quite ugly due to experimentation
*/
function getJSON(){
$.getJSON( "data.json", function(data){
var dataArray = [];
console.log(data);
var series = {};
for (var x in data.Series) {
var dates = [];
var values = [];
// Loop across all the measurements for every serie.
for (var i = 0; i < data.Series[x].length; i++) {
var obj = data.Series[x][i];
dates.push(moment(obj.Date).format("MMMM Mo"));
values.push(obj.Value);
}
// Keep the list of dates and values by serie name.
series[x] = {
dates: dates,
values: values
};
}
//some debug stuff
console.log(series.height.dates);
console.log(series.height.values);
var dataArray = {
labels: series.height.dates,
datasets: [
{
label: "Height",
strokeColor: "rgb(26, 188, 156)",
pointColor: "rgba(220,220,220,1)",
pointStrokeColor: "#fff",
pointHighlightFill: "#fff",
pointHighlightStroke: "rgba(220,220,220,1)",
data: series.height.values
}
]
};
function chartFunc(dataArray) {
var ctx = document.getElementById("heightChart").getContext("2d");
var myLineChart = new Chart(ctx).Line(dataArray, {
scaleShowGridLines : true,
bezierCurve : true,
bezierCurveTension : 0.4,
datasetStroke : false,
fillColor: "rgba(0,0,0,0)",
datasetFill : false,
responsive: true,
showTooltips: true,
animation: false,
});
} //chartFunc
chartFunc(dataArray);
}); //JQ getJSON
}//getJSON
$( document ).ready(function() {
getJSON();
$(document).on('shown.bs.tab', 'a[data-toggle="tab"]', function (e) {
console.log("TAB CHANGED");
});
});
【问题讨论】:
-
您需要调用图表库的“重绘”方法,而不是
console.log("TAB CHANGED");。 -
嗨@carl 我有同样的问题,你能解决吗?谢谢
-
嘿@AgustinHaller 很抱歉我还没有解决它。我目前正在从事其他项目。
标签: javascript jquery html twitter-bootstrap chart.js