javascript - Chart.js - IndexSizeError : Index or size is negative or greater than the allowed amount

标签 javascript angularjs chart.js

我正在使用 Chart.js Arc 函数绘制圆环图。 有一段时间效果很好。但最近它开始抛出上述异常。

Chart.js Arc 函数中的以下行抛出异常:

ctx.arc(this.x, this.y, this.outerRadius, this.startAngle, this.endAngle);

这里的值如下:

x = 0, y = 0, outerRadius = -0.5, startAngle = 4.71XXX, endAngle = 4.71XXX

我猜 x 和 y 的零值或 outerRadius 的负值导致了问题。

奇怪的是,当我清除浏览器缓存并尝试相同的数据集时,它运行良好。 尽管服务器返回的数据集相同,但上述值不同。

x = 50, y = 25, outerRadius = 24.5, startAngle = 4.71XXX, endAngle = 4.71XXX

在前一种情况下,x 和 y 计算可能是在 canvas 渲染之前完成的。

其他人有类似的问题吗? 谢谢:-)

最佳答案

这是因为您的图表在创建时(即调用 Chart(ctx).Doughnut 时)没有有限大小。图表宽度和高度为 0,outerRadius 变为 -segmentStrokeWidth/4(默认情况下为 2 - 因此 -0.5 )

要修复此错误,请确保您的 Canvas 可见且大小合适,然后再创建图表。例如,如果图表位于选项卡中,请等待选项卡可见,然后再创建图表。如果在展开面板中,等待它完全展开(放在动画的回调函数中才是正确的做法)

您可以通过将 Canvas 大小设置为 0 来重现错误

<canvas id="myChart" width="0" height="0"></canvas>

您的情况似乎是清除浏览器缓存会延迟图表呈现,以便在创建图表时 Canvas 具有正确的大小。验证这一点的一种简单方法是将您的图表创建包装在 setTimeout 中并延迟一些。

关于javascript - Chart.js - IndexSizeError : Index or size is negative or greater than the allowed amount,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32696135/

相关文章:

javascript - 将 SQLite PHP 数组转换为 Javascript 数组?

javascript - AngularJS ng-show 和 ng-hide 在 $http 调用后不会改变状态

javascript - Coffeescript/javascript 中状态提供者的困惑

charts - 如何在 chart.js 中指定刻度位置?

javascript - 在窗口调整大小时更新 Canvas

javascript - 尝试用 ng-mouseover 和 ng-mouseleave 改变 ng-class

javascript - 单击按钮后 Chart.js 为图表添加动画

javascript - 我想随机单击我的列表项,但不能

javascript - 如何通过 JQuery ajax 调用将数据表的选定行的数据发布到 php Controller

javascript - 1.4.4 中的 jquery 实时点击行为