【发布时间】:2015-07-15 12:09:16
【问题描述】:
我有以下利用 ChartJS 库的代码。
/*assume the tags in the right place */
<canvas id="graph1" width="300" height="300"></canvas>
var ctx = $("#graph1").get(0).getContext("2d");
var myChart = new Chart(ctx).Line(graph1Generator("day"));
...一切正常,但是在添加以下事件处理程序以使用不同数据清除和重新绘制相同图表后,出现故障。
weekButton.addEventListener("click", function(){
ctx.clearRect (0, 0, 300, 300);
ctx.canvas.width = 300;
ctx.canvas.height = 300;
myChart = new Chart(ctx).Line(graph1Generator("week"));
这段代码确实成功地用新数据重新绘制了图表,但是当我将鼠标悬停在它上面时,它会对应该清除的旧图表进行一些非常奇怪的“闪回”。这让我相信它没有清除旧的。
【问题讨论】:
-
我认为如果您只是重新使用旧图表对象而不是在事件处理程序中创建一个新对象,它会起作用。作为替代方案,您也可以在创建新之前致电
myChart.destroy();。 -
如何将旧图表对象与新数据重用?虽然图表相同,但它们具有不同类型的数据。此外,
myChar.destroy();似乎在每次活动后都会复制我的图表大小。为什么会这样? -
我认为只是
myChart.Line(graph1generator("week"));(或者您需要为新数据做的任何事情)。而不是用你的代码清除画布,让 Chart 来做:myChart.clear();。 (这可能比.destroy()更有效;我不确定。) -
虽然 myChart.clear() 不会复制大小,但它仍然无法解决故障。此外,当更改
myChart.Line(graph1generator("week"));之类的对象时,我得到一个ReferenceError: Can't find variable: graph1generator。这很奇怪,因为它的一个函数在上面定义了 1 个作用域(全局作用域)。 -
没有看到更多代码很难知道发生了什么。您是否尝试过在 jsfiddle 或 CodePen 中复制问题?
标签: javascript jquery charts chart.js