每个context都有一个绘图状态栈,包括以下部分:
- 当前变换矩阵(transformation matrix)
- 当前裁减区域(clipping region)
- 下列属性的当前值: strokeStyle,fillStyle,globalAlpha,lineWidth,lineCap,lineJoin,miterLimit,shadowOffsetX,shadowOffsetY,shadowBlur,shadowColor,globalCompositeOperation,font,textAlign,textBaseLine
当前路径(path)和位图(bitmap)不属于绘图状态,当前路径是永久性的,只有beginPath()可以重置它,而当前位图是canvas的属性,不是context的。
- context.save()将当前状态压入栈
- context.restore()将当前状态弹出栈
由于canvas只有一个2d context,save和restore可以在很多场合得到应用,例如在变换中就特别常见。