状态的保存和恢复

最后更新于: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)
';