提高HTML5 Canvas效能的技巧

2021-08-27 13:05:31 字數 1734 閱讀 7390

一:使用快取技術實現預繪製,減少重複繪製canvs內容

很多時候我們在canvas上繪製與更新,總是會保留一些不變的內容,對於這些內容

應該預先繪製快取,而不是每次重新整理。

直接繪製**如下:

context.font="24px arial";

context.fillstyle="blue";

context.filltext("please press to exit game",5,50);

requestanimationframe(render);

使用快取預繪製技術:

function render(context) 

function drawtext(context)

使用canvas

快取繪製技術的時候,一定記得快取

canvas

物件大小要小於實際的

canvas

大小。盡量把繪製直線點的操作放在一起,而且盡量一次繪製完成,乙個不好的**如下:

for (var i = 0; i < points.length - 1; i++)
修改以後效能較高的**如下:

context.beginpath();

for (var i = 0; i < points.length - 1; i++)

context.stroke();

避免不必要的

canvas

繪製狀態頻繁切換,乙個頻繁切換繪製

style

的例子如下:

var gap = 10;

for(var i=0; i<10; i++)

避免頻繁切換繪製狀態,效能更好的繪製**如下:

// even

context.fillstyle = "red";

for (var i = 0; i < 5; i++)

// odd

context.fillstyle = "blue";

for (var i = 0; i < 5; i++)

繪製時,只繪製需要更新的區域,任何時候都要避免不必要的重複繪製與額外開銷。

對於複雜的場景繪製使用分層繪製技術,分為前景與背景分別繪製。定義canvas層的

html如下:

如果沒有必要,要盡量避免使用繪製特效,如陰影,模糊等。

避免使用浮點數座標。

繪製圖形時,長度與座標應選取整數而不是浮點數,原因在於canvas支援半個畫素繪製

會根據小數字實現插值演算法實現繪製影象的反鋸齒效果,如果沒有必要請不要選擇浮點數值。

清空canvas上的繪製內容:

context.clearrect(0, 0, canvas.width,canvas.height)

但是其實在

canvas

還有一種類似

hack

的清空方法:

canvas.width = canvas.width;

也可以實現清空

canvas上內容

的效果,但是在某些瀏覽器上可能不支援。

HTML5 canvas 繪製圓形

canvas繪製圓形的思路 1 建立路徑 beginpath 2 建立圓形的路徑 3 關閉路徑 closepath 路徑不關閉也能繪製出圖形 4 設定繪製樣式。建立圓形路徑時需要用到物件的arc方法,方法定義如 arc x,y,radius,startangle,endangle,countercl...

HTML5 canvas擦除無效

部分安卓手機上會出現canvas內圖表重疊,並且清除無效,屬於偶現缺陷,非常難以確定其產生原因,比如下圖這個樣子,第一次繪製的圖形沒有擦除,導致第二次繪製時出現重影 初步考慮為裝置自身問題,引起canvasapi的context.clearrect執行無效。在經過一些嘗試之後,發現在每次擦除 cle...

HTML5canvas時鐘例項

直接放 不太好,還是簡單說說運用到的canvas知識 1 canvas 元素用於在網頁上繪製圖形。id c width 1000 height 400 canvas 2 canvas2d環境下繪製 var ogc oc.getcontext 2d 3 我要開始繪製路徑啦 ogc.begin path...