保存と復元
キャンバスの描画状態を保存するのがsaveメソッドで、復元するのがrestoreメソッドです。saveメソッドは描画状態をスタックに積み上げていき、restoreメソッドは最後に保存したものから順に復元していきます。
// 描画状態の保存 save(); // 描画状態の復元 restore();
サンプル
上段のサンプルでは、キャンバスの初期状態を保存し、いちいちfillStyleメソッドなどでリセットする手間を省いています。本来であれば黒い部分にもfillStyleが適用されますが、restoreメソッドで初期状態が復元されたことにより、fillStyleは初期値である黒色になっています。またスタックから取り出して空になっているので、再度初期状態を保存しています。
下段のサンプルでは透過度を減少させながら保存し、後からスタックより取り出して適用させています。
// サンプル(上段) // 初期状態の保存 cx.save(); // 塗りつぶしの色の指定と図形の描画 cx.fillStyle = "rgba(255, 200, 200, 1)"; cx.fillRect(10, 10, 100, 100); cx.fillText("Before", 20, 120); // 保存した状態の復元と保存 cx.restore(); cx.save(); // 図形の描画 cx.fillRect(130, 10, 100, 100); cx.fillText("After", 140, 120); // 保存した状態の復元と保存 cx.restore(); // サンプル(下段) // 塗りつぶしの色の指定 cx.fillStyle = "rgba(100, 100, 255, 1)"; // 透過度を減少させながら保存 for(var i = 0; i<5; i++){ cx.globalAlpha -= 0.2; cx.save(); } // 透過度を復元させ、適用 for(var i = 0; i<5; i++){ cx.restore(); cx.fillRect(80 + (i * 15), 150 + (i * 15), 70, 70); }