主要思路
- 画出表盘,刻度,表盘60个刻度,每个刻度6度
- 秒针,分针,时针刻度计算
- 设置一秒钟的定时器
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>时钟</title>
<style type="text/css">
.clock-circle {
width: 200px;
height: 200px;
border: 2px solid #000000;
border-radius: 50%;
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.clock-point{
width: 14px;
height: 14px;
border-radius: 50%;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
z-index: 1;
background-color: #000000;
}
ul li {
position: absolute;
top: 100px;
left: 99px;
width: 2px;
height: 96px;
border-bottom: 5px solid #000000;
list-style: none;
transform-origin: 50% 0%;
-webkit-transform-origin: 50% 0%;
-moz-transform-origin: 50% 0%;
-ms-transform-origin: 50% 0%;
-o-transform-origin: 50% 0%;
}
ul li.hour {
height: 91px;
border-bottom: 10px solid #000000;
}
#clock-hour {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-3px, 0);
width: 6px;
height: 60px;
background-color: blue;
-webkit-transform-origin: 50% 0%;
-moz-transform-origin: 50% 0%;
-ms-transform-origin: 50% 0%;
-o-transform-origin: 50% 0%;
transform-origin: 50% 0%;
}
#clock-minute {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-2px, 0);
width: 4px;
height: 80px;
background-color: forestgreen;
-webkit-transform-origin: 50% 0%;
-moz-transform-origin: 50% 0%;
-ms-transform-origin: 50% 0%;
-o-transform-origin: 50% 0%;
transform-origin: 50% 0%;
}
#clock-second {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-1px, 0);
width: 2px;
height: 90px;
background-color: chocolate;
-webkit-transform-origin: 50% 0%;
-moz-transform-origin: 50% 0%;
-ms-transform-origin: 50% 0%;
-o-transform-origin: 50% 0%;
transform-origin: 50% 0%;
}
</style>
</head>
<body>
<div class="clock-circle">
<div class="clock-point"></div>
<ul id="father-scale"></ul>
<div id="clock-hour"></div>
<div id="clock-minute"></div>
<div id="clock-second"></div>
</div>
</body>
<script>
var fatherScale = document.getElementById('father-scale');
var scales = "";
for (var i = 0; i < 60; i++) {
scales += "<li></li>";
}
fatherScale.innerHTML = scales;
var scale = document.getElementsByTagName("li");
for(var i = 0; i < 60; i++){
if(i%5==0){
scale[i].className = "hour";
}
scale[i].style.transform = "rotateZ("+i*6+"deg)";
}
var hourNeedle = document.getElementById("clock-hour");
var minNeedle = document.getElementById("clock-minute");
var secNeedle = document.getElementById("clock-second");
var timer = null;
function start() {
clearTimeout(timer);
timer = null;
var nowDate = new Date();
var s = nowDate.getSeconds();
secNeedle.style.transform = "rotateZ(" + (s * 6 + 180) + "deg)";
secNeedle.style.webkitTransform = "rotateZ(" + (s * 6 + 180) + "deg)";
secNeedle.style.oTransform = "rotateZ(" + (s * 6 + 180) + "deg)";
secNeedle.style.msTransform = "rotateZ(" + (s * 6 + 180) + "deg)";
secNeedle.style.mozTransform = "rotateZ(" + (s * 6 + 180) + "deg)";
var m = nowDate.getMinutes() + s/60;
minNeedle.style.transform = "rotateZ(" + (m * 6 + 180) + "deg)";
minNeedle.style.webkitTransform = "rotateZ(" + (m * 6 + 180) + "deg)";
minNeedle.style.oTransform = "rotateZ(" + (m * 6 + 180) + "deg)";
minNeedle.style.msTransform = "rotateZ(" + (m * 6 + 180) + "deg)";
minNeedle.style.mozTransform = "rotateZ(" + (m * 6 + 180) + "deg)";
var h = nowDate.getHours() + m/60;
hourNeedle.style.transform = "rotateZ(" + (h * 30 + 180) + "deg)";
hourNeedle.style.webkitTransform = "rotateZ(" + (h * 30 + 180) + "deg)";
hourNeedle.style.oTransform = "rotateZ(" + (h * 30 + 180) + "deg)";
hourNeedle.style.msTransform = "rotateZ(" + (h * 30 + 180) + "deg)";
hourNeedle.style.mozTransform = "rotateZ(" + (h * 30 + 180) + "deg)";
timer = window.setTimeout(start, 1000)
}
start();
</script>
</html>