HTML5 canvas save和restore方法講解



save()和restore()方法是繪製複雜圖形必不可少的方法.它們分別是用來保存和恢復 canvas 狀態的,都沒有參數。 Canvas 狀態是以堆(stack)的方式保存的,每一次調用 save 方法,當前的狀態就會被推入堆中保存起來。這種狀態包括:當前應用的變形(即移動,旋轉和縮放,見下): strokeStyle, fillStyle, globalAlpha, lineWidthjavascript

  

  save()和restore()方法是繪製複雜圖形必不可少的方法.它們分別是用來保存和恢復 canvas 狀態的,都沒有參數。html

  Canvas 狀態是以堆(stack)的方式保存的,每一次調用 save 方法,當前的狀態就會被推入堆中保存起來。這種狀態包括:當前應用的變形(即移動,旋轉和縮放,見下):java

  strokeStyle, fillStyle, globalAlpha, lineWidth, lineCap, lineJoin, miterLimit, shadowOffsetX, shadowOffsetY, shadowBlur, shadowColor, globalCompositeOperation 的值canvas

  你能夠調用任意屢次 save 方法。每一次調用 restore 方法,上一個保存的狀態就從堆中彈出,全部設定都恢復。spa

  舉個save 和 restore 的應用例子吧。3d


  咱們嘗試用這個連續矩形的例子來描述 canvas 的狀態堆是如何工做的。rest

  第一步是用默認設置畫一個大四方形,而後保存一下狀態。改變填充顏色畫第二個小一點的白色四方形,而後再保存一下狀態。再次改變填充顏色繪製更小一點的藍色四方形。而後咱們調用了restore方法將設置回到前一個save狀態下的fillStyle="white",即在不設定顏色值的狀況下再繪製最小的矩形時其添充色爲白色。htm

  一旦咱們調用 restore,狀態堆中最後的狀態會彈出,並恢復全部設置。若是不是以前用 save 保存了狀態,那麼咱們就須要手動改變設置來回到前一個狀態,這個對於兩三個屬性的時候仍是適用的,一旦多了,咱們的代碼將會猛漲。簡而言之restore方法就能夠理解成將其對應的當前save狀態下的設置所有恢復爲前一個狀態blog

  代碼:ip

<script type="text/javascript">
window.onload=function(){
 var ctx=document.getElementByIdx_x("canvas").getContext("2d");
 ctx.fillRect(10,10,150,150);

 ctx.save();
 ctx.fillStyle="white";
 ctx.fillRect(30,30,110,110);

 ctx.save();
 ctx.fillStyle="blue";
 ctx.fillRect(50,50,70,70);
 ctx.restore();//回到上一個狀態,即 ctx.fillStyle="white";

 ctx.save();
 ctx.fillRect(70,70,30,30);//因此此處沒有設定fillStyle的時候顏色爲white,注意哦!若是在白色矩形後面也restore一下剛此處的fillStyle就爲黑色了
 ctx.restore();
}
</script>

  本文來自瓶中精靈的博客,原文地址:http://blog.sina.com.cn/s/blog_a3468cf601013dmi.html

相關文章
相關標籤/搜索