Javascript 保存<;帆布>;要在以后的动画帧中重画的内容?

Javascript 保存<;帆布>;要在以后的动画帧中重画的内容?,javascript,html,canvas,Javascript,Html,Canvas,我正在上绘制一个需要昂贵计算的图形。我想创建一个动画(在画布上移动鼠标时),其中图形不变,但在其上绘制了一些其他对象 因为画布将需要重新绘制很多,我不想执行计算来渲染每一帧的图形。我如何绘制一次图形,保存它,然后使用保存的渲染重新绘制动画的后续帧,这样昂贵的计算只需进行一次&我所要重新绘制的只是简单得多的动画层 我尝试在第二个画布上绘制图形&然后使用ctx.drawImage()将其渲染到主画布上,但在画布上绘制似乎不起作用,除非它位于dom中&而不是display:none。我是否必须做一些骇

我正在
上绘制一个需要昂贵计算的图形。我想创建一个动画(在画布上移动鼠标时),其中图形不变,但在其上绘制了一些其他对象

因为画布将需要重新绘制很多,我不想执行计算来渲染每一帧的图形。我如何绘制一次图形,保存它,然后使用保存的渲染重新绘制动画的后续帧,这样昂贵的计算只需进行一次&我所要重新绘制的只是简单得多的动画层


我尝试在第二个画布上绘制图形&然后使用
ctx.drawImage()
将其渲染到主画布上,但在画布上绘制似乎不起作用,除非它位于dom中&而不是
display:none。我是否必须做一些骇人的事情,比如将临时画布放置在视野之外,或者有更干净的方法来完成此操作?

我必须对图表库进行一些更改。我99%确信它使用重叠的画布。有一个图表层和一个覆盖层。你可以看看源代码

第一次在画布上绘制图形,然后

var imdata = ctx.getImageData(0,0,width,height);
然后

var imdata = ctx.getImageData(0,0,width,height);
ctx.putImageData( imdata, 0,0);

对于渲染的其余部分。

您需要使用至少两个画布:一个用于复杂图形,第二个位于第一个画布之上(具有相同的大小,绝对定位),用于动画形状。此方法适用于IE,而getImageData不适用于ExCanvas

每个在画布上绘制复杂图形的库都使用这种方法(Flot和其他方法)



这在IE中有效吗?excanvas支持canvas的imagedata功能吗?不,不。但这是一个IE不支持的问题。很好。如果你的目标是AdobeAIR、Mobile Safari、Titanium或任何其他可以让你摆脱IE担忧的理智平台,这是真的。我不知道这一点,而且在我读过的所有Canvas文档中也从未看到过这方面的任何东西。好消息。