前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >前端|创建简单动态时钟

前端|创建简单动态时钟

作者头像
算法与编程之美
发布2020-08-10 16:54:05
1.6K0
发布2020-08-10 16:54:05
举报

介绍

动态时钟,就是通过CSS工具的美化效果和引入JavaScript,让网页呈现出钟表的动态效果,让它能够记录时间。通过改变背景颜色、指针颜色和阴影效果,让时钟呈现不同的颜色。

思路解析

制作动态时钟时,要注意以下细节:

(1)使用box-shadow标签来设置时钟的轮廓和阴影。

(2)用JS获取每个指针和它的时间,用到const限定符和querySelector方法。

制作过程

(1)创建一个主容器class="clock"的时钟,为每个指针命名。

代码语言:javascript
复制

<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把背景图片放大到适合容器的尺寸,让图片比例不变。

代码语言:javascript
复制
*{

         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" 伪元素为时钟添加实心小圆点,方便指针确认中心点。

代码语言:javascript
复制
.clock:before{

         content:  ''; /*必须存在,使伪元素显示*/

         position:  absolute;

         width:  15px;

         height:  15px;

         background:  #fff;

         border-radius:  50%;

         z-index:  10000;/*使实心小圆点在视图的最上层,遮挡住指针交叉的部分*/

}

(4)为不同指针添加宽高和颜色。

代码语言:javascript
复制
.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 度)。

代码语言:javascript
复制
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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法与编程之美 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档