【发布时间】:2016-03-31 21:08:46
【问题描述】:
我知道 save() 和 restore() 的功能,它们保存和恢复当前画布状态。但对这些还没有深刻的认识。当程序调用该函数绘制时钟时,它在重绘之前已经清除了所有的画布。为什么 save() 也应该在这里添加。谁能解释一下?谢谢。
window.onload=function(){
var oCan=document.getElementById('clock');
var oCanPen=oCan.getContext('2d');
drawClock();
setInterval(function(){
drawClock();
},1000);
function drawClock(){
// oCanPen.save();
oCanPen.clearRect(0,0,oCan.width,oCan.height);
var time=new Date();
var second=time.getSeconds();
var minute=time.getMinutes();
var hour=time.getHours()+minute/60;
oCanPen.save();
oCanPen.beginPath();
oCanPen.arc(200,200,100,0,360*Math.PI/180,false);
oCanPen.closePath();
oCanPen.stroke();
oCanPen.beginPath();
for (var i = 0; i < 60; i++) {
oCanPen.moveTo(200,200);
oCanPen.arc(200,200,100,i*6*Math.PI/180,i*6*Math.PI/180,false);
}
oCanPen.closePath();
oCanPen.stroke();
oCanPen.beginPath();
oCanPen.fillStyle='#fff';
oCanPen.arc(200,200,90,0,360*Math.PI/180,false);
oCanPen.closePath();
oCanPen.fill();
oCanPen.beginPath();
for (var i = 0; i < 12; i++) {
oCanPen.moveTo(200,200);
oCanPen.arc(200,200,100,i*30*Math.PI/180,i*30*Math.PI/180,false);
}
oCanPen.closePath();
oCanPen.stroke();
oCanPen.beginPath();
oCanPen.fillStyle='#fff';
oCanPen.arc(200,200,80,0,360*Math.PI/180,false);
oCanPen.closePath();
oCanPen.fill();
oCanPen.beginPath();
oCanPen.strokeStyle='red';
var iSecond=(-90+second*6)*Math.PI/180;
oCanPen.moveTo(200,200);
oCanPen.arc(200,200,85,iSecond,iSecond,false);
oCanPen.closePath();
oCanPen.stroke();
oCanPen.beginPath();
oCanPen.lineWidth=4;
oCanPen.strokeStyle='blue';
var iMinute=(-90+minute*6)*Math.PI/180;
oCanPen.moveTo(200,200);
oCanPen.arc(200,200,60,iMinute,iMinute,false);
oCanPen.closePath();
oCanPen.stroke();
oCanPen.beginPath();
oCanPen.lineWidth=6;
var iHour=(-90+hour*30)*Math.PI/180;
oCanPen.strokeStyle='black';
oCanPen.moveTo(200,200);
oCanPen.arc(200,200,40,iHour,iHour,false);
oCanPen.closePath();
oCanPen.stroke();
oCanPen.restore();
}
};
body{
background: #333;
}
canvas{
background: #f2f2f2;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title></title>
</head>
<body>
<canvas id="clock" width="400" height="400"></canvas>
</body>
</html>
【问题讨论】: