<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>canvas时钟</title> </head> <body> <canvas id="drawing" width="200" height="200" style="position:absolute; left:0px; top:0px;"></canvas> <script> var XD = document.getElementById("drawing").getContext("2d"); function clock(){ function x(a){ return Math.sin(2*Math.PI/360*a) } function y(a){ return -Math.cos(2*Math.PI/360*a) } XD.save(); //-----表盘----- XD.beginPath();//开始路径 XD.globalCompositeOperation = "copy";//设定叠加方法 XD.translate(100,100);//变换原点 //-----绘制中心----- XD.lineWidth = 5; XD.moveTo(2,0); XD.arc(0,0,2,0,2*Math.PI,false); XD.stroke(); XD.restore(); XD.save(); XD.translate(100,100);//变换原点 //-----绘制外圆----- XD.moveTo(99,0); XD.arc(0,0,99,0,2*Math.PI,false); //-----绘制内圆----- XD.moveTo(94,0); XD.arc(0,0,94,0,2*Math.PI,false); //-----绘制数字----- XD.font = "bold 12px Arial"; XD.textAlign = "center"; XD.textBaseline = "middle"; for(var i=1; i<=12; i++){ XD.fillText(i, x(i*30)*80, y(i*30)*80); } //-----绘制刻度----- for(var i=1; i<=60; i++){ if(i%5 != 0){ XD.moveTo(x(i*6)*79, y(i*6)*79); XD.lineTo(x(i*6)*81, y(i*6)*81); } } XD.stroke();//描边路径 XD.restore(); //-----根据当前时间计算初始角度----- var mm = new Date(); var ms = mm.getHours()*3600+mm.getMinutes()*60+mm.getSeconds(); var yidu = Math.PI/180; var rm = yidu * ms * 6; var rf = yidu * ms/60 * 6; var rs = yidu * ms/3600 * 30; XD.save(); //-----时针----- XD.translate(100,100);//变换原点 XD.rotate(rs);//初始位置 XD.beginPath();//开始路径 //-----绘制----- XD.moveTo(0,0); XD.lineTo(0,-45); XD.lineTo(-1,-45); XD.lineTo(0,-50); XD.lineTo(1,-45); XD.lineTo(0,-45); XD.lineTo(0,10); XD.lineTo(-3,10); XD.lineTo(3,10); //-----旋转----- XD.rotate(Math.PI/21600); XD.stroke();//描边路径 XD.restore(); XD.save(); //-----分针----- XD.translate(100,100);//变换原点 XD.rotate(rf);//初始位置 XD.beginPath();//开始路径 //-----绘制----- XD.moveTo(0,0); XD.lineTo(0,-67); XD.lineTo(-1,-67); XD.lineTo(0,-72); XD.lineTo(1,-67); XD.lineTo(0,-67); XD.lineTo(0,10); XD.lineTo(-3,10); XD.lineTo(3,10); //-----旋转----- XD.rotate(Math.PI/1800); XD.stroke();//描边路径 XD.restore(); XD.save(); //-----秒针----- XD.strokeStyle="red"; XD.translate(100,100);//变换原点 XD.rotate(rm);//初始位置 XD.beginPath();//开始路径 //-----绘制表针----- XD.moveTo(0,0); XD.lineTo(0,-87); XD.lineTo(0,10); XD.lineTo(-3,10); XD.lineTo(3,10); //-----绘制中心----- XD.moveTo(1,0); XD.arc(0,0,1,0,2*Math.PI,false); XD.moveTo(2,0); XD.arc(0,0,2,0,2*Math.PI,false); //-----旋转----- XD.rotate(Math.PI/30); XD.stroke();//描边路径 XD.restore(); } clock(); setInterval("clock()",1000); </script> </body> </html>