HTML5出来很久了一直没好好研究过,今天找视频看了,研究了一下,制作了一个闹钟。
效果图如下
<div> <canvas id="Clock" width="500" height="500">your broswer can not see the clock </canvas> <script> var clock = document.getElementById("Clock"); var cxt = clock.getContext("2d"); function DrawClock() { //clear canvas //要先清空画布,才能保持画面的动画效果 cxt.clearRect(0, 0, 500, 500); cxt.font = "20px Blackadder ITC"; cxt.fillText("My clock", 220, 150); cxt.font = "14px Blackadder ITC"; cxt.fillText("---Made by Lan", 240, 170); var image = new Image(); image.src = "1.png"; cxt.drawImage(image, 220, 280, 100, 100); var now = new Date(); var sec = now.getSeconds(); var min = now.getMinutes(); var hour = now.getHours(); // must be hour+ min/60 hour = hour + min / 60; hour = hour > 12 ? hour - 12 : hour; //round, scale, niddle cxt.beginPath(); cxt.arc(250, 250, 200, 0, 360, false); cxt.strokeStyle = "#ABCDEF"; cxt.lineWidth = 9; cxt.stroke(); cxt.closePath(); //scale 刻度,时刻 cxt.font = "30px Bold"; for (var i = 0; i < 12; i++) { cxt.save(); cxt.lineWidth = 7; cxt.strokeStyle = "Black"; cxt.translate(250, 250); cxt.rotate(i * 30 * Math.PI / 180); cxt.beginPath(); cxt.moveTo(0, -170); cxt.lineTo(0, -190); if (i == 0) { cxt.fillText("12", -10, -145); } else { cxt.fillText(i.toString(), -10, -145); } cxt.stroke(); cxt.closePath(); cxt.restore(); }
// 分 for (var j = 0; j < 60; j++) { cxt.save(); cxt.lineWidth = 4; cxt.translate(250, 250); cxt.rotate(j * 6 * Math.PI / 180); cxt.beginPath(); cxt.moveTo(0, -180); cxt.lineTo(0, -190); cxt.strokeStyle = "Black"; cxt.stroke(); cxt.closePath(); cxt.restore(); } cxt.beginPath(); cxt.save(); cxt.lineWidth = 7; cxt.strokeStyle = "Black"; cxt.translate(250, 250); cxt.rotate(hour * 30 * Math.PI / 180); cxt.moveTo(0, -150); cxt.lineTo(0, 10); cxt.stroke(); cxt.restore(); cxt.closePath(); cxt.beginPath(); cxt.save(); cxt.lineWidth = 5; cxt.strokeStyle = "Black"; cxt.translate(250, 250); cxt.rotate(min * 6 * Math.PI / 180); cxt.moveTo(0, -130); cxt.lineTo(0, 10); cxt.stroke(); cxt.restore(); cxt.closePath(); cxt.beginPath(); cxt.save(); cxt.lineWidth = 3; cxt.strokeStyle = "red"; cxt.fillStyle = "Black"; cxt.translate(250, 250); cxt.rotate(sec * 6 * Math.PI / 180);//秒 cxt.moveTo(0, 150); cxt.lineTo(0, -15); cxt.stroke(); cxt.beginPath(); cxt.arc(0, 0, 5, 0, 360, false); cxt.fillStyle = "gray"; cxt.strokeStyle = "red"; cxt.fill(); cxt.closePath(); cxt.beginPath(); cxt.arc(0, 130, 5, 0, 360, false); cxt.fillStyle = "black"; cxt.strokeStyle = "red"; cxt.fill(); cxt.stroke(); cxt.restore(); cxt.closePath(); } DrawClock(); setInterval(DrawClock, 1000); </script> </div>
需要注意的几个常见的方法
1. closePath,beginPath(),用路径画图的时候,需要注意在各个,打开路径,关闭路径
2. 在做旋转的时候要注意设置原点,translate(250,250);