2013-07-12 220 views
0

有沒有辦法將轉換應用於畫布元素(scaletranslatesetTransform),而無需先清除畫布,然後重新繪製所有內容。我的具體效果是使用鼠標拖動圖形(所以只需translate一遍又一遍地用鼠標),但每次翻譯我都必須清除畫布並重新繪製我在那裏的內容。理想情況下,我只想調用translate方法,並使用一些超快的內置方法爲我重新佈置畫布。一旦有足夠的東西需要重新繪製,只是迭代和重繪的成本會導致性能低於預期。畫布轉換渲染

任何想法如何提高這裏的表現?

+1

我想嘗試[fabric.js](http://fabricjs.com/),它允許用鼠標移動對象,看起來非常快。你使用'requestAnimationFrame'嗎? – Jacopofar

+0

不,我不是,不幸的是我不能使用fabric.js,因爲這是我自己的項目。謝謝! – tau

回答

1

您將不得不重繪每一次,因爲平移,旋轉和縮放僅將參數設置爲畫布,並且不對現有內容執行任何操作。它們只適用於畫在畫布上的下一個東西。

但是,您可以嘗試使用CSS進行轉換。這將轉換包含其內容的畫布元素。

請注意,在這種情況下,您需要計算鼠標座標的反偏移量(同樣,如果您在畫布本身上保留轉換)。

+0

謝謝!這就是我的想法。我已經有了我需要的工作,所以我只是尋求進一步的優化。虐待使用CSS看,看看它是如何工作的,至少出於好奇! – tau