我写的这个时钟分两部分,一个是钟表,一个是表里面的现代时间
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>时钟</title>
<style>
* {
margin: 0;
padding: 0;
}
ul,li,ol {
list-style: none;
}
body {
background-color: #74c4c8;
}
.container {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
}
/* 通过背景图径向渐变实现外层西瓜色效果 */
.shizhong {
width: 200px;
height: 200px;
background-image: radial-gradient(#ec7277 0,#ec7277 60%,
#e1ecde 60%,#e1ecde 63%,
#079554 63%,#079554 68%,
#056e3e 68%, #056e3e 100%
);
border-radius: 50%;
position: relative;
}
.shizhong::after {
content: "";
display: block;
width: 4%;
height: 4%;
border-radius: 50%;
background: #ffffff;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
}
/* 刻度 */
.kedu {
width: 81%;
height: 81%;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
border-radius: 50%;
}
.kedu-content {
width: 100%;
height: 100%;
border-radius: 50%;
position: relative;
}
.kedu-content>span {
display: block;
width: 100% ;
height: 1%;
position: absolute;
}
/* 30组格子线,每隔6deg(度)是一组 */
.kedu-content>span:nth-child(1) {
top: 50%;
left: 0;
transform: translateY(-50%);
}
.kedu-content>span:nth-child(2) {
top: 50%;
left: 0;
transform: translateY(-50%) rotate(6deg);
}
.kedu-content>span:nth-child(3) {
top: 50%;
left: 0;
transform: translateY(-50%) rotate(12deg);
}
.kedu-content>span:nth-child(4) {
top: 50%;
left: 0;
transform: translateY(-50%) rotate(18deg);
}
.kedu-content>span:nth-child(5) {
top: 50%;
left: 0;
transform: translateY(-50%) rotate(24deg);
}
.kedu-content>span:nth-child(6) {
top: 50%;
left: 0;
transform: translateY(-50%) rotate(30deg);
}
.kedu-content>span:nth-child(7) {
top: 50%;
left: 0;
transform: translateY(-50%) rotate(36deg);
}
.kedu-content>span:nth-child(8) {
top: 50%;
left: 0;
transform: translateY(-50%) rotate(42deg);
}
.kedu-content>span:nth-child(9) {
top: 50%;
left: 0;
transform: translateY(-50%) rotate(48deg);
}
.kedu-content>span:nth-child(10) {
top: 50%;
left: 0;
transform: translateY(-50%) rotate(54deg);
}
.kedu-content>span:nth-child(11) {
top: 50%;
left: 0;
transform: translateY(-50%) rotate(60deg);
}
.kedu-content>span:nth-child(12) {
top: 50%;
left: 0;
transform: translateY(-50%) rotate(66deg);
}
.kedu-content>span:nth-child(13) {
top: 50%;
left: 0;
transform: translateY(-50%) rotate(72deg);
}
.kedu-content>span:nth-child(14) {
top: 50%;
left: 0;
transform: translateY(-50%) rotate(78deg);
}
.kedu-content>span:nth-child(15) {
top: 50%;
left: 0;
transform: translateY(-50%) rotate(84deg);
}
.kedu-content>span:nth-child(16) {
top: 50%;
left: 0;
transform: translateY(-50%) rotate(90deg);
}
.kedu-content>span:nth-child(17) {
top: 50%;
left: 0;
transform: translateY(-50%) rotate(96deg);
}
.kedu-content>span:nth-child(18) {
top: 50%;
left: 0;
transform: translateY(-50%) rotate(102deg);
}
.kedu-content>span:nth-child(19) {
top: 50%;
left: 0;
transform: translateY(-50%) rotate(108deg);
}
.kedu-content>span:nth-child(20) {
top: 50%;
left: 0;
transform: translateY(-50%) rotate(114deg);
}
.kedu-content>span:nth-child(21) {
top: 50%;
left: 0;
transform: translateY(-50%) rotate(120deg);
}
.kedu-content>span:nth-child(22) {
top: 50%;
left: 0;
transform: translateY(-50%) rotate(126deg);
}
.kedu-content>span:nth-child(23) {
top: 50%;
left: 0;
transform: translateY(-50%) rotate(132deg);
}
.kedu-content>span:nth-child(24) {
top: 50%;
left: 0;
transform: translateY(-50%) rotate(138deg);
}
.kedu-content>span:nth-child(25) {
top: 50%;
left: 0;
transform: translateY(-50%) rotate(144deg);
}
.kedu-content>span:nth-child(26) {
top: 50%;
left: 0;
transform: translateY(-50%) rotate(150deg);
}
.kedu-content>span:nth-child(27) {
top: 50%;
left: 0;
transform: translateY(-50%) rotate(156deg);
}
.kedu-content>span:nth-child(28) {
top: 50%;
left: 0;
transform: translateY(-50%) rotate(162deg);
}
.kedu-content>span:nth-child(29) {
top: 50%;
left: 0;
transform: translateY(-50%) rotate(168deg);
}
.kedu-content>span:nth-child(30) {
top: 50%;
left: 0;
transform: translateY(-50%) rotate(173deg);
}
/* 通过伪元素设置对角的格子线 */
.kedu-content>span::after,.kedu-content>span::before {
content: "";
display: block;
width: 4% ;
height: 100%;
background: #555555;
position: absolute;
}
.kedu-content>span::before {
top: 0;
left: 0;
}
.kedu-content>span::after {
top: 0;
right: 0;
}
/* 改变1-12时线的宽度,因为会更长一些 */
.kedu-content>span:nth-child(1)::after,.kedu-content>span:nth-child(1)::before {
width: 7%;
}
.kedu-content>span:nth-child(6)::after,.kedu-content>span:nth-child(6)::before {
width: 7%;
}
.kedu-content>span:nth-child(11)::after,.kedu-content>span:nth-child(11)::before {
width: 7%;
}
.kedu-content>span:nth-child(16)::after,.kedu-content>span:nth-child(16)::before {
width: 7%;
}
.kedu-content>span:nth-child(21)::after,.kedu-content>span:nth-child(21)::before {
width: 7%;
}
.kedu-content>span:nth-child(26)::after,.kedu-content>span:nth-child(26)::before {
width: 7%;
}
/* 时针 */
.shiZhen {
height: 45%;
width: 1.5%;
position: absolute;
top: 50%;
left: 50%;
}
.shiZhen::before {
content: "";
display: block;
height: 50%;
width: 100%;
position: absolute;
top: 0;
left: 0;
background:#a0161b;
}
/* 分针 */
.fenZhen {
height: 57%;
width: 1%;
position: absolute;
top: 50%;
left: 50%;
}
.fenZhen::before {
content: "";
display: block;
height: 50%;
width: 100%;
position: absolute;
top: 0;
left: 0;
background: orangered;
}
/* 秒针 */
.miaoZhen {
height: 65%;
width: 1%;
position: absolute;
top: 50%;
left: 50%;
}
.miaoZhen::before {
content: "";
display: block;
height: 50%;
width: 100%;
position: absolute;
top: 0;
left: 0;
background: #333333;
}
/* 当前时间样式 */
#time {
text-align: center;
position: absolute;
font-size: 12px;
top: 10%;
left: 50%;
transform: translateX(-50%);
}
</style>
</head>
<body>
<div class="container">
<div class="shizhong">
<!-- 刻度 -->
<div class="kedu">
<div class="kedu-content">
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
</div>
<div id="time"></div>
</div>
<!-- 时针 -->
<div class="shiZhen" id="sz"></div>
<!-- 分针 -->
<div class="fenZhen" id="fz"></div>
<!-- 秒针 -->
<div class="miaoZhen" id="mz"></div>
</div>
</div>
</body>
<script>
// 通过id获取html元素
var shizhen = document.getElementById("sz");
var fenzhen = document.getElementById("fz");
var miaozhen = document.getElementById("mz");
// 将时间与时针转动关联
function setTime() {
// 用Date内置的API获取当前时间
var date = new Date();
var intHour = date.getHours();
var intMinute = date.getMinutes();
var intSecond = date.getSeconds();
shizhen.style.transform="translate(-50%,-50%) rotate("+((intHour%12)/12)*360+"deg) ";
fenzhen.style.transform="translate(-50%,-50%) rotate("+(intMinute/60)*360+"deg) ";
miaozhen.style.transform="translate(-50%,-50%) rotate("+(intSecond/60)*360+"deg) ";
}
setInterval(setTime,1000);
// 显示当前时间
function sayTime() {
let date = new Date();
let hour = date.getHours();
let minute = date.getMinutes();
let second = date.getSeconds();
if (hour < 10) {
hour = "0" + hour;
}
if (minute < 10) {
minute = "0" + minute;
}
if (second < 10) {
second = "0" + second;
}
let time = document.getElementById("time");
time.innerHTML = hour + ":" + minute + ":" + second;
}
setInterval(sayTime, 1000);
</script>
</html>
代码虽说很长,但是很简单,相信只要看应该看得懂,说一下我遇到的问题,就是一开始给时针、分针、秒针采用定位的时候,最好是所有的针在没动起来之前都能停靠在十二点的位置,因为这样后面写的就不会出现多了个角度这个问题。
页面效果: