Saving and restoring state
是绘制复杂图形时必不可少的操作。
save()和restore()
save
和 restore
方法是用来保存和恢复 canvas
状态的,都没有参数。
Canvas
的状态就是当前画面应用的所有样式和变形的一个快照。
关于
save()
Canvas状态存储在栈中,每当
save()
方法被调用后,当前的状态就被推送到栈中保存。一个绘画状态包括:当前应用的变形(即移动,旋转和缩放)
strokeStyle
,fillStyle
,globalAlpha
,lineWidth
,lineCap
,lineJoin
,miterLimit
,shadowOffsetX
,shadowOffsetY
,shadowBlur
,shadowColor
,globalCompositeOperation 的值
当前的裁切路径(
clipping path
)可以调用任意多次
save
方法。(类似数组的push()
)关于
restore()
每一次调用
restore
方法,上一个保存的状态就从栈中弹出,所有设定都恢复。(类似数组的pop()
)
var ctx;
function draw(){
var canvas = document.getElementById('tutorial');
if (!canvas.getContext) return;
var 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); // 使用加载的配置绘制一个矩形
}
draw();