许多画布对象会导致“无效状态错误:尝试使用不可用或不再可用的对象”

many canvas objects result in "InvalidStateError: An attempt was made to use an object that is not, or is no longer, usable"

本文关键字:对象 不再 状态 布对象 许多画 无效 错误      更新时间:2023-09-26

试图在<canvas>上管理10.000个简单形状,我尝试使用缓存作为重绘的替代品。令我惊讶的是:

  • 使用ImageDatacanvas.{get|put}Image似乎非常慢。
  • 使用 canvas.createPattern 缓存模式几乎与重绘一样快。
  • 为每个
  • 形状缓存整个画布甚至比重绘更快。

但是,由于某种原因,某些画布在缓存期间中断。经过一些查找后,每隔一段时间(每 2-5 次缓存查找)检索一个画布,导致

InvalidStateError: An attempt was made to use an object that is not, or is no longer, usable

要扔。我使用相同的代码来缓存不同的对象,所以我认为问题不在于缓存,而在于canvas对象的数量。

也许我也有兴趣将形状动画化为 (0,0),将它们的大小减小到零。例如,即使矩形是 6x3px 大,也会发生错误,因此它不应该与大小有关。

知道吗?如果没有立即的想法,我将简化发布代码。谢谢,诺比

就我而言,我在画布面积为零的情况下看到了此错误:如果宽度*高度= 0,则此类画布在drawImage期间会给出此错误。

Ken 是完全正确的 - 尽管我已经看到矩形仍应为 6x3 时的错误,但当我将矩形动画化为大小 (1,1) 而不是 (0,0) 时,错误不再出现。