介绍
动态时钟,就是通过CSS工具的美化效果和引入JavaScript,让网页呈现出钟表的动态效果,让它能够记录时间。通过改变背景颜色、指针颜色和阴影效果,让时钟呈现不同的颜色。
思路解析
制作动态时钟时,要注意以下细节:
(1)使用box-shadow标签来设置时钟的轮廓和阴影。
(2)用JS获取每个指针和它的时间,用到const限定符和querySelector方法。
制作过程
(1)创建一个主容器class="clock"的时钟,为每个指针命名。
<div><!--时钟-->
<div> <!--时针-->
<div id="hr"></div>
</div>
<div> <!--分针-->
<div id="mn"></div>
</div>
<div> <!--秒针-->
<div id="sc"></div>
</div>
</div>
(2)用CSS为时钟布置背景,在.clock使用Flex布局方式,并且让它水平、垂直方向都居中;引入时钟的背景图片,用background-size: cover把背景图片放大到适合容器的尺寸,让图片比例不变。
*{
margin: 0;
padding: 0;
box-sizing: border-box;
}
body{
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
background: #091921;
}
.clock{
width: 350px;
height: 350px;
display: flex;
justify-content: center;
align-items: center;
background: url(img/clock.png);
background-size: cover;
border: 4px solid #091921;
border-radius: 50%;
.clock{
width: 350px;
height: 350px;
display: flex;
justify-content: center;
align-items: center;
background: url(img/clock.png);
background-size: cover;
border: 4px solid #091921;
border-radius: 50%;
box-shadow: 0 -15px 15px rgba(255,255,255,0.05),/*时钟上半部分外发光*/
inset 0 -15px 15px rgba(255,255,255,0.05),/*时钟下半部分内发光*/
0 15px 15px rgba(0,0,0,0.3),/*时钟下半部分外阴影*/
inset 0 15px 15px rgba(0,0,0,0.3);/*时钟上半部分内阴影*/
}
(3)使用 CSS3 中的 ":before" 伪元素为时钟添加实心小圆点,方便指针确认中心点。
.clock:before{
content: ''; /*必须存在,使伪元素显示*/
position: absolute;
width: 15px;
height: 15px;
background: #fff;
border-radius: 50%;
z-index: 10000;/*使实心小圆点在视图的最上层,遮挡住指针交叉的部分*/
}
(4)为不同指针添加宽高和颜色。
.clock .hour,.clock .min,.clock .sec{
position: absolute;
}
.clock .hour, .hr{
width: 160px;
height: 160px;
}
.clock .min, .mn{
width: 190px;
height: 190px;
}
.clock .sec, .sc{
width: 230px;
height: 230px;
}
.hr .mn .sc{
display: flex;
justify-content: center;
/*align-items: center;*/
position: absolute;
border-radius: 50%;
}
.hr:before{
content: '';
position: absolute;
width: 8px;
height: 80px;
background: orangered;
z-index: 10;
border-radius: 6px 6px 0 0;
margin-left: 76px;
}
.mn:before{
content: '';
position: absolute;
width: 4px;
height: 90px;
background: #fff;
z-index: 11;
border-radius: 6px 6px 0 0;
margin-left: 93px;
}
.sc:before{
content: '';
position: absolute;
width: 2px;
height: 150px;
background: red;
z-index: 11;
border-radius: 6px 6px 0 0;
margin-left: 114px;
}
图1
(5)用JS获取到当前的时间,分别计算每个指针应该旋转的角度。其中,deg代表:度(一个圆 360 度)。
const deg = 6; /*获取每个指针*/
const hr = document.querySelector("#hr");
const mm = document.querySelector("#mn");
const ss = document.querySelector("#sc");
setInterval(() => {
let day = new Date(); /*获取当前时间*/
let hh = day.getHours() * 30;
let mm = day.getMinutes() * deg;
let ss = day.getSeconds() * deg;
hr.style.transform = 'rotate('+(hh+mm/12)+'deg)'; /*计算每个指针应旋转的角度*/
mn.style.transform = 'rotate('+mm+'deg)';
sc.style.transform = 'rotate('+ss+'deg)';
})
效果图:
图2
END