状态的保存和恢复
最后更新于:2022-04-02 03:28:56
[TOC]
## 保存和回复
```
save()
restore()
```
可以保存到状态有
1. 当前应用的变形(即移动,旋转和缩放)
2.,`fillStyle`,`globalAlpha`,`lineWidth`,`lineCap`,`lineJoin`,`miterLimit`,`shadowOffsetX`,`shadowOffsetY`,`shadowBlur`,`shadowColor`,`globalCompositeOperation 的值`
3. 当前的裁切路径(`clipping path`)
## 实例
```
var draw=()=>{
let canvas = document.querySelector("#tutorial");
if(!canvas.getContext)return;
/** * @type CanvasRenderingContext2D */
let ctx = canvas.getContext("2d");
ctx.fillRect(0, 0, 150, 150); // 使用默认设置绘制一个矩形
ctx.save(); // 保存默认状态
ctx.fillStyle = 'red' // 在原有配置基础上对颜色做改变
ctx.fillRect(15, 15, 120, 120); // 使用新的设置绘制一个矩形
ctx.save(); // 保存当前状态
ctx.fillStyle = '#FFF' // 再次改变颜色配置
ctx.fillRect(30, 30, 90, 90); // 使用新的配置绘制一个矩形
ctx.restore(); // 重新加载之前的颜色状态,此时变为红色
ctx.fillRect(45, 45, 60, 60); // 使用上一次的配置绘制一个矩形
ctx.restore(); // 加载默认颜色配置,此时变为黑色
ctx.fillRect(60, 60, 30, 30); // 使用加载的配置绘制一个矩形
}
```
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/e1/c9/e1c9c81a2a9ef86c10ede6b007a944bb_175x181.png)
';