JavaScript画时钟
话不多说,直接上源码
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <title></title> 6 <meta charset="utf-8" /> 7 <style type="text/css"> 8 div { 9 text-align: center; 10 margin-top: 50px; 11 } 12 </style> 13 </head> 14 <body> 15 <div> 16 <canvas id="clock" height="500" width="500"></canvas> 17 </div> 18 <script type="text/javascript"> 19 var dom = document.getElementById('clock'); 20 var ctx = dom.getContext('2d'); 21 var width = ctx.canvas.width; 22 var height = ctx.canvas.height; 23 var r = width / 2; 24 var rem=width/200; 25 //画背景 26 function drawBackground() { 27 ctx.save(); 28 ctx.translate(r, r); 29 ctx.beginPath(); 30 ctx.lineWidth = 10*rem; 31 ctx.arc(0, 0, r - ctx.lineWidth/2, 0, 2 * Math.PI, false); 32 ctx.stroke(); 33 var hourNumbers = [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2]; 34 ctx.font = 18*rem+'px Arial'; 35 ctx.textAlign = "center"; 36 ctx.textBaseline = "middle"; 37 hourNumbers.forEach(function (number, i) { 38 var rad = 2 * Math.PI / 12 * i; 39 var x = Math.cos(rad) * (r - 30 * rem); 40 var y = Math.sin(rad) * (r - 30 * rem); 41 ctx.fillText(number, x, y); 42 }); 43 for (var i = 0; i < 60; i++) { 44 var rad = 2 * Math.PI / 60 * i; 45 var x = Math.cos(rad) * (r - 18 * rem); 46 var y = Math.sin(rad) * (r - 18 * rem); 47 ctx.beginPath(); 48 if (i % 5 == 0) { 49 ctx.fillStyle = '#000' 50 } else 51 ctx.fillStyle = '#ccc' 52 ctx.arc(x, y, 2 * rem, 0, 2 * Math.PI, false); 53 ctx.fill(); 54 } 55 } 56 //画时针 57 function drawHour(hour, Minute) { 58 ctx.save(); 59 ctx.beginPath(); 60 var rad = 2 * Math.PI / 12 * hour; 61 var mrad = 2 * Math.PI / 12 / 60 * Minute; 62 ctx.rotate(rad + mrad); 63 ctx.lineCap = 'rund'; 64 ctx.moveTo(0, 10 * rem); 65 ctx.lineWidth = 3 * rem; 66 ctx.fillStyle = '#5406F3'; 67 ctx.lineTo(0, -r + 45 * rem); 68 ctx.stroke(); 69 ctx.restore(); 70 } 71 //画分针 72 function drawMinute(Minute, Second) { 73 ctx.save(); 74 ctx.beginPath(); 75 ctx.fillStyle = "#5406F3"; 76 var rad = 2 * Math.PI / 60 * Minute; 77 var mrad = 2 * Math.PI / 3600 * Second; 78 ctx.rotate(rad + mrad); 79 ctx.lineCap = 'rund'; 80 ctx.moveTo(0, 10 * rem); 81 ctx.lineWidth = 2 * rem; 82 ctx.lineTo(0, -r + 25 * rem); 83 ctx.stroke(); 84 ctx.restore(); 85 } 86 //画秒针 87 function drawSecond(Second) { 88 ctx.save(); 89 ctx.beginPath(); 90 ctx.fillStyle = '#c14543'; 91 var rad = 2 * Math.PI / 60 * Second; 92 ctx.rotate(rad); 93 ctx.lineWidth = 1; 94 ctx.moveTo(-2, 0 * rem); 95 ctx.lineTo(2, 0 * rem); 96 ctx.lineTo(1, -r + 18 * rem); 97 ctx.lineTo(-1, -r + 18 * rem); 98 99 ctx.fill(); 100 ctx.restore(); 101 } 102 //画中间圆点 103 function drawDot() { 104 ctx.beginPath(); 105 ctx.fillStyle = '#fff'; 106 ctx.arc(0, 0, 3 * rem, 0, 2 * Math.PI, false); 107 ctx.fill(); 108 } 109 110 setInterval(draw, 1000); 111 function draw() { 112 ctx.clearRect(0, 0, width, height); 113 var now = new Date(); 114 var hour = now.getHours(); 115 var minute = now.getMinutes(); 116 var second = now.getSeconds(); 117 drawBackground(); 118 drawHour(hour, minute); 119 drawMinute(minute, second); 120 drawSecond(second); 121 drawDot(); 122 ctx.restore(); 123 } 124 125 </script> 126 </body> 127 </html>
效果图: