save()和restore()是用来保存和恢复canvas状态的,都没有参数。 Canvas的状态就是当前画面应用的全部样式和变形的一个快照。javascript
Canvas状态存储在栈中,每当save()
方法被调用后,当前的状态就被推送到栈中保存。一个绘画状态包括:java
一、当前应用的变形(即移动,旋转,和缩放)canvas
二、strokeStyle,fillStyle,globalAlpha,lineWidth,lineCap,lineJoin,miterLimit,shadowOffsetX,shadowOffsetY
shadowBlur,shadowColor,globalCompositeOperation的值rest三、当前的裁剪路径(clipping path)code
你能够调用任意屡次save方法ip
每一次调用restore方法,上一次保存的状态就从栈中弹出,全部设定都恢复。get
例一it
function draw(){ var ctx = document.getElementById("canvas").getContext("2d"); ctx.fillRect(0,0,150,150); ctx.save(); //默认设置 ctx.fillStyle = "#09f"; ctx.fillRect(15,15,120,120); //填充当前设置的#09f颜色 ctx.restore(); ctx.fillRect(30,30,90,90); //填充默认的黑色 }
例二io
<script> var ctx = document.getElementById("canvas").getContext("2d"); ctx.strokeStyle = "pink"; ctx.lineWidth = 3; ctx.save();//默认设置 function drawLine(){ ctx.beginPath(); ctx.moveTo(50,50); ctx.lineTo(100,100); ctx.stroke(); } function draw(){ ctx.strokeStyle = "green"; ctx.save(); ctx.restore(); ctx.restore(); drawLine(); } draw() //线为pink draw() //线为green </script>
第一次执行draw() 画出的线为pink的缘由:由于第一次执行js代码执行2次ctx.save(),对应着2次ctx.restore();返回到颜色为pink的状态function
第二次执行只执行一次ctx.save(),执行2次的ctx.restore()效果跟一次是同样的,因此为绿色
注意:通常ctx.save()与ctx.restore()是成对出现的,当ctx.restore()的个数多余ctx.save(),多余的并无效果。