2013-07-12 167 views
0

有没有办法将转换应用于画布元素(scaletranslatesetTransform),而无需先清除画布,然后重新绘制所有内容。我的具体效果是使用鼠标拖动图形(所以只需translate一遍又一遍地用鼠标),但每次翻译我都必须清除画布并重新绘制我在那里的内容。理想情况下,我只想调用translate方法,并使用一些超快的内置方法为我重新布置画布。一旦有足够的东西需要重新绘制,只是迭代和重绘的成本会导致性能低于预期。画布转换渲染

任何想法如何提高这里的表现?

+1

我想尝试[fabric.js](http://fabricjs.com/),它允许用鼠标移动对象,看起来非常快。你使用'requestAnimationFrame'吗? – Jacopofar

+0

不,我不是,不幸的是我不能使用fabric.js,因为这是我自己的项目。谢谢! – tau

回答

1

您将不得不重绘每一次,因为平移,旋转和缩放仅将参数设置为画布,并且不对现有内容执行任何操作。它们只适用于画在画布上的下一个东西。

但是,您可以尝试使用CSS进行转换。这将转换包含其内容的画布元素。

请注意,在这种情况下,您需要计算鼠标坐标的反偏移量(同样,如果您在画布本身上保留转换)。

+0

谢谢!这就是我的想法。我已经有了我需要的工作,所以我只是寻求进一步的优化。虐待使用CSS看,看看它是如何工作的,至少出于好奇! – tau