共计 2197 个字符,预计需要花费 6 分钟才能阅读完成。
绘制如下图所示一个动静时钟
<body><canvas width="600px" height="600px" style="background-color: #ccc; display:block; margin: 0 auto"></canvas></body>
<script>
window.onload = function(){
// 获取 canvas 对象
var canvas = document.querySelector("canvas");
// 获取上下文
var context = canvas.getContext("2d");
// 封装一个函数,用来时钟的动静
function clock(){
// 绘制圆盘
context.beginPath();// 开始
context.arc(300,300,200,0,2*Math.PI);
context.fillStyle = "pink";// 圆盘的色彩
context.fill();// 绘制圆盘
context.closePath();// 完结
// 绘制时刻度
for(var i=0; i<12; i++){context.save();// 保留
context.lineWidth = 4;// 时针的宽度
context.beginPath();
context.translate(300,300);// 将原点平移到圆心
context.rotate(i*(Math.PI*6));//360/12=30° 180°/30°=6
context.moveTo(0,-180);
context.lineTo(0,-200);
context.stroke();// 绘制线条
context.fillStyle = "black";// 线条的色彩
// 绘制时钟数字
context.font = "28px bold";// 字体大小为 28px,加粗
context.rotate(Math.PI/6);// 将字体旋转 30°
context.fillText(i+1,-7,-220);// 数字回转 -7,并且在圆外显示
context.closePath();
context.restore();
context.restore();// 回滚}
// 绘制分刻度
for(i=0; i<60; i++){context.save();
context.translate(300,300);// 平移到原点
context.rotate(i*(Math.PI/30));
context.beginPath();
context.moveTo(0,-190);
context.lineTo(0,-200);
context.stroke();
context.closePath();
context.restore();}
// 获取以后工夫
var today = new Date();
// 获取以后小时
var hour = today.getHours();
// 获取分
var min = today.getMinutes();
// 获取秒
var sec = today.getSeconds();
hour = hour+min/60;
// 绘制时针
context.save();
context.lineWidth = 3;
context.translate(300,300);
context.rotate(hour*(Math.PI/6));
context.beginPath();
context.moveTo(0,10);
context.lineTo(0,-80);
context.stroke();
context.closePath();
context.restore();
// 绘制分针
context.save();
context.lineWidth = 2;
context.translate(300,300);
context.rotate(min*(Math.PI/30));
context.beginPath();
context.moveTo(0,10);
context.lineTo(0,-100);
context.stroke();
context.closePath();
context.restore();
// 绘制秒针
context.save();
context.lineWidth=1;
context.rotate(sec*(Math.PI/30));
context.strokeStyle = "red";
context.beginPath();
context.moveTo(0,10);
context.lineTo(0,-120);
context.stroke();
context.closePath();
context.restore();
// 交叉处
context.save();
context.translate(300,300);
context.beginPath();
context.fillStyle = "#ccc";
context.strokeStyle = "red";
context.arc(0,0,5,0,Math.PI*2);
context.fill();
context.stroke();
context.closePath();
context.restore();
setTimeout(clock,1000);// 超时模仿
}
clock();}
</script>
正文完