保存と復元
キャンバスの描画状態を保存するのが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);
}