您好我正在使用chartnewjs。我想用动画更新饼图。我正在使用带有实时更新的折线图。 updateChart(ctx,data,config,true,true)方法正常工作。我已经尝试了相同的饼图,但图表没有得到更新。
然后我尝试每次刷新创建new Chart(document.getElementById("peak_session").getContext("2d")).Pie(data,options)
它工作正常并且饼图动画也能正常工作,我从DOM中移除画布并重新创建但浏览器内存不断增加。
然后我尝试全局创建var ctx1 = new Chart(document.getElementById("peak_session").getContext("2d")); var ctx2 = new Chart(document.getElementById("current_session").getContext("2d"));
。然后在每个刷新中更新上下文(ctx1,ctx2),如ctx1.Pie(peak_data,options); ctx2.Pie(session_data,options);
它的工作正常,但图表不是动画。当图表具有相同的值时,没有可视显示。你有没有可以帮助用动画更新饼图而没有内存泄漏?
答案 0 :(得分:0)
我能够很好地更新饼图。也许只尝试保存上下文的实例。
将您的上下文保存为变量,如下所示:
var ctx1 = document.getElementById('peak-session').getContext('2d');
var ctx2 = document.getElementById('current-session').getContext('2d');
创建图表......
new Chart(ctx1).Pie(peak_data, options);
new Chart(ctx2).Pie(session_data, options);
现在您可以使用ChartNew的updateChart函数:
updateChart(ctx1, peak_data, options, true)
updateChart(ctx2, peak_data, options, true)
答案 1 :(得分:0)
GitHub ChartNew.js文件夹中似乎有一个非常密切相关的例子。
看起来像ChartNew.Js库文件中更新饼图的提供示例显示他们正在更新数据数组,然后调用updateChart函数。我不完全确定你在做什么不同,但你应该能够使用记事本或任何你喜欢的方式将以下示例复制到一个新的Html文件中,保存它,然后打开它以查看更新功能应该如何工作。
<!doctype html>
<!--[if lte IE 8]><SCRIPT src='source/excanvas.js'></script><![endif]--><SCRIPT src='../ChartNew.js'></script>
<SCRIPT>
function setColor(area,data,config,i,j,animPct,value)
{
if(value > 35)return("rgba(220,0,0,"+animPct);
else return("rgba(0,220,0,"+animPct);
}
var charJSPersonnalDefaultOptions = { decimalSeparator : "," , thousandSeparator : ".", roundNumber : "none", graphTitleFontSize: 2 };
defCanvasWidth=600;
defCanvasHeight=300;
var mydata = [
{
value : 30,
color: "#D97041",
title : "data1",
},
{
value : 90,
color: "#C7604C",
title : "data2"
},
{
value : 24,
color: "#21323D",
title : "data3"
},
{
value : 58,
color: "#9D9B7F",
title : "data4"
},
{
value : 82,
color: "#7D4F6D",
title : "data5"
},
{
value : 8,
color: "#584A5E",
title : "data6"
}
]
var opt = {
animation : true,
canvasBorders : true,
canvasBordersWidth : 3,
canvasBordersColor : "black",
graphTitle : "animation With Update",
inGraphDataShow : true,
inGraphDataTmpl: "<%=v2%>",
onAnimationComplete : startUpdate,
graphTitleFontSize: 18
};
function startUpdate(ctx, config, data, tp, count) {
console.log("onAnimationComplete Function executed");
};
function updt(ctx,data,config) {
updtData(data);
updateChart(ctx,data,config,true,true);
setTimeout(function (){updt(ctx,data,config);}, 5000);
}
function updtData(data) {
var i;
for(i=0;i<data.length-1;i++) data[i].value=data[i+1].value;
data[data.length-1].value=Math.floor(Math.random()*50);
}
</SCRIPT>
<html>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<head>
<title>Demo ChartNew.js</title>
</head>
<body>
<center>
<FONT SIZE=6><B>Demo of ChartNew.js !</B></FONT> <BR>
<script>
document.write("<canvas id=\"canvas_Pie\" height=\""+defCanvasHeight+"\" width=\""+defCanvasWidth+"\"></canvas>");
window.onload = function() {
var myLine = new Chart(document.getElementById("canvas_Pie").getContext("2d")).Pie(mydata,opt);
setTimeout(function (){updt(document.getElementById("canvas_Pie").getContext("2d"),mydata,opt);}, 5000);
}
</script>
</body>
</html>
此示例每隔几秒钟使用新的随机数据更新图表。几乎所有的更新逻辑似乎都在函数中:
function updt(ctx,data,config) {
updtData(data);
updateChart(ctx,data,config,true,true);
setTimeout(function (){updt(ctx,data,config);}, 5000);
}
我不确定这是否有帮助,但您可以在https://github.com/FVANCOP/ChartNew.js/查看其他一些示例。