前言
从古至今,时钟不仅是记录与衡量时间流逝的工具,更是人类文明与艺术的结晶,随着互联网技术的发展,传统时钟也逐渐融入了现代的网页设计之中。下面,让我们一起使用HTML,再结合CSS和JavaScript,创造出属于自己的在线时钟。
实现效果
背景图
HTML
<div class="clock">首先定义一个包含整个时钟布局的外部div盒子。<div class="outer-clock-face">用于显示时钟的外圈,包括小时的刻度标记。<div class="inner-click-face">该盒子包含了时针、分针和秒针。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>clock</title>
<link rel="stylesheet" href="./style.css">
</head>
<body>
<div class="clock">
<div class="outer-clock-face">
<div class="marking marking-one"></div>
<div class="marking marking-two"></div>
<div class="marking marking-three"></div>
<div class="marking marking-four"></div>
<div class="inner-click-face">
<div class="hand hour-hand"></div>
<div class="hand min-hand"></div>
<div class="hand second-hand"></div>
</div>
</div>
</div>
<script src="./index.js"></script>
</body>
</html>
CSS
用于定义时钟的样式。
.clock{
width: 300px;
height: 300px;
border-radius: 50%;
border: 7px solid #ffebdb;
background-image: url('./clock.jpeg');
background-size: 111%;
padding: 20px;
}
.outer-clock-face{
width: 100%;
height: 100%;/*h100p+tab*/
border-radius: 100%;
position: relative;
}
/*伪元素 行内元素*/
.outer-clock-face::before,
.outer-clock-face::after
{
content: '';
display: block;
width: 10px;
height: 100%;
background-color: #596235;
border-radius: 8px;/*bdrs+tab*/
position: absolute;
left: 50%;
transform: translate(-50%);/*左移棍子的一半*/
}
.outer-clock-face::after{
transform: rotateZ(90deg);
transform-origin: center center;/*控制旋转基点在棍子的正中间*/
}
.marking{
width: 3px;
height: 100%;
background-color: #596235;
position: absolute;
left:50%;
transform: translate(-50%);
transform-origin: center center;
}
.marking-one{
transform: rotateZ(30deg);
}
.marking-two{
transform: rotateZ(60deg);
}
.marking-three{
transform: rotateZ(120deg);
}
.marking-four{
transform: rotateZ(150deg);
}
.inner-click-face{
width: 80%;
height: 80%;
border-radius: 50%;
background-color: #ffebdb;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
z-index: 1;/*默认0*/
}
.hand {
width: 50%;
height: 6px;
background-color: red;
border-radius: 6px;
position: absolute;
top: 50%;
right: 50%;
transform: translateY(-50%) rotateZ(90deg);
transform-origin: 100% center;
}
.hour-hand{
width: 30%;
}
.min-hand{
width: 40%;
height: 3px;
}
.second-hand{
width: 45%;
height: 2px;
background-color: #b3b3b3;
}
JS
- 首先使用
document.querySelector方法选取HTML中带有相应类名的元素。这里选中的相应类名分别对应秒针、分针和时针。 - 定义
setTime函数,new Date()创建一个表示当前日期和时间的对象。 - 计算每根指针的旋转角度:秒针每秒转6度,还需要给秒针加上90度的初始偏移(因为秒针初始位置应指向12点钟方向);分针每分钟转6度,也要加上90度的初始偏移;时针每小时转动30度,加上90度的初始偏移。
- 使用
style.transform属性来改变transform属性值,使指针旋转到正确的位置。 - 最后调用setTime函数和设置定时器,立即执行setTime函数一次,以便在页面加载时显示当前的时间。再使用
setInterval函数每隔1秒调用一次setTime,确保时钟能够持续更新并显示当前的时间。
//获取秒针
//设置秒针旋转的角度
//获取分针
//获取分针的旋转角度
//获取时针
//获取时针的旋转角度
var secondHand=document.querySelector('.second-hand');
var minHand=document.querySelector('.min-hand');
var hourHand=document.querySelector('.hour-hand');
function setTime(){
var now=new Date();//获取当前时间
//读取秒
var seconds=now.getSeconds();
var secondsDegrees=seconds*6+90;
secondHand.style.transform=`rotate(${secondsDegrees}deg)`;/* ``用于变量和字符串拼接 */
var mins=now.getMinutes();
var minsDegrees=mins*6+90;
minHand.style.transform=`rotate(${ minsDegrees}deg)`;
var hours=now.getHours();
var hoursDegrees=hours*30+90+(mins/60)*30;
hourHand.style.transform=`rotate(${hoursDegrees}deg)`;
}
setTime();
//定时器
setInterval(setTime,1000);
结语
快去打造一个属于自己专属时钟吧。