学习CSS之用CSS实现时钟效果
<h2>一、机械时钟</h2><h3>1.最终效果</h3>
<p> 用 CSS 绘制的机械时钟效果如下:</p>
<p> <img src="https://img2018.cnblogs.com/i-beta/1450803/202002/1450803-20200223125954367-1990207727.png" alt=""></p>
<p> HTML 中代码结构为:</p>
<blockquote>
<div><body></div>
<div> <div class="clock"></div>
<div> <ul class="min"></ul></div>
<div> <ul class="hour"></ul></div>
<div> <ul class="numbers"></ul></div>
<div> <ul class="pointer"><span style="background-color: initial"></ul></span></div>
<div> </div></div>
<div></body></div>
</blockquote>
<p> 其中 clock 类为表盘, min 类是分钟刻度,hour 类是时钟刻度,numbers 类是数字刻度,类名为 pointer 的 ul 中包含的则是时针、分针和秒针等。 </p>
<h3>2.绘制表盘</h3>
<p> 首先要把表盘和表盘中心给绘制出来,如下图:</p>
<p> <img src="https://img2018.cnblogs.com/i-beta/1450803/202002/1450803-20200223130048565-219151500.png" alt=""></p>
<p> 表盘中心要处在正中心,使用绝对定位进行实现,代码如下:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> 表盘 </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
.clock {
width: 200px;
height: 200px;
margin: 30px auto;
border</span>-<span style="color: rgba(0, 0, 0, 1)">radius: 100px;
background</span>-<span style="color: rgba(0, 0, 0, 1)">color: #292a38;
position: relative;
}
.circle {
position: absolute;
top: </span>50%<span style="color: rgba(0, 0, 0, 1)">;
left: </span>50%<span style="color: rgba(0, 0, 0, 1)">;
background: white;
width: 10px;
height: 10px;
border</span>-<span style="color: rgba(0, 0, 0, 1)">radius: 5px;
margin</span>-top: -<span style="color: rgba(0, 0, 0, 1)">5px;
margin</span>-left: -<span style="color: rgba(0, 0, 0, 1)">5px;
}</span></pre>
</div>
<h3>3.绘制刻度</h3>
<p> 钟表的刻度就是一个矩形,只不过需要根据表盘中心进行偏移,例如:</p>
<p> <img src="https://img2018.cnblogs.com/i-beta/1450803/202002/1450803-20200223131928210-1179813214.png" alt=""></p>
<p> 对应的代码为:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> 刻度 </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
<br>.line</span>-<span style="color: rgba(0, 0, 0, 1)">demo {
position: absolute;
width: 20px;
height: 10px;
left: </span>50%<span style="color: rgba(0, 0, 0, 1)">;
top: </span>50%<span style="color: rgba(0, 0, 0, 1)">;
transform</span>-<span style="color: rgba(0, 0, 0, 1)">origin: left center;
transform: translate(85px, </span>-<span style="color: rgba(0, 0, 0, 1)">5px);
}</span></pre>
</div>
<p> 但要实现一点到十二点总共十二个刻度,还需要使用 transform 中的 rotate() 进行旋转,实现的代码如下,其中 val 表示的是各个刻度线对应的旋转角度,而 key1 和 key2 分别表示 x 方向和 y 方向上的偏移量,而对 key1 和 key2 进行调整,是为了改善刻度线显示的效果。</p>
<div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> CreateHourLines() {
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> 绘制钟表的时钟刻度线 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)"> 3</span> <span style="color: rgba(0, 0, 255, 1)">var</span> html = ""<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> key1表示x方向上的偏移量,key2表示y方向上的偏移量</span>
<span style="color: rgba(0, 128, 128, 1)"> 5</span> <span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)"> val, key1, key2;
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> i = 0; i < 12; i++<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span> val = i * 30<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span> key1 = 88<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span> key2 = 0<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (val > 180 && val < 360<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">11</span> key1 = 90<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">12</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">13</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (val > 0 && val < 180<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">14</span> key1 = 85
<span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">16</span>
<span style="color: rgba(0, 128, 128, 1)">17</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (val > 90 && val < 270<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">18</span> key2 = 3<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">19</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">20</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (val < 90 || val > 270<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">21</span> key2 = -3<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">22</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">23</span> html += "<li style='transform: rotate(" + val + "deg) translate(" + key1 + "px, " + key2 + "px)'></li>"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">24</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">25</span> $(".hour"<span style="color: rgba(0, 0, 0, 1)">).html(html);
</span><span style="color: rgba(0, 128, 128, 1)">26</span> }</pre>
</div>
</div>
<p> 分钟的刻度线绘制和时钟类似,除此之外,还要绘制各个小时的数字刻度,效果如下:</p>
<p> <img src="https://img2018.cnblogs.com/i-beta/1450803/202002/1450803-20200223133359301-703605047.png" alt=""></p>
<h3>4.绘制指针</h3>
<p> 指针的绘制要把时针、分针和秒针都绘制出来,需要注意的是时钟最短最粗,秒针最长最细,而且都要用绝对定位使指针处在表盘中心,实现的效果如下:</p>
<p> <img src="https://img2018.cnblogs.com/i-beta/1450803/202002/1450803-20200223133908380-1469038346.png" alt=""></p>
<p> 时针、分针和秒针的 CSS 代码如下:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> 指针 </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
.p</span>-<span style="color: rgba(0, 0, 0, 1)">hour {
position: absolute;
width: 45px;
height: 3px;
top: </span>50%<span style="color: rgba(0, 0, 0, 1)">;
left: </span>50%<span style="color: rgba(0, 0, 0, 1)">;
transform</span>-<span style="color: rgba(0, 0, 0, 1)">origin: left center;
background: #fff;
margin</span>-top: -<span style="color: rgba(0, 0, 0, 1)">2px;
}
.p</span>-<span style="color: rgba(0, 0, 0, 1)">min {
position: absolute;
width: 60px;
height: 2px;
top: </span>50%<span style="color: rgba(0, 0, 0, 1)">;
left: </span>50%<span style="color: rgba(0, 0, 0, 1)">;
transform</span>-<span style="color: rgba(0, 0, 0, 1)">origin: left center;
background: #fff;
margin</span>-top: -<span style="color: rgba(0, 0, 0, 1)">2px;
}
.p</span>-<span style="color: rgba(0, 0, 0, 1)">sec {
position: absolute;
width: 80px;
height: 1px;
top: </span>50%<span style="color: rgba(0, 0, 0, 1)">;
left: </span>50%<span style="color: rgba(0, 0, 0, 1)">;
transform</span>-<span style="color: rgba(0, 0, 0, 1)">origin: left center;
background: #fff;
margin</span>-top: -<span style="color: rgba(0, 0, 0, 1)">2px;
}</span></pre>
</div>
<h3>5.转动指针</h3>
<p> 指针的转动要通过使用 transform 中的 rotate 进行实现,而转动的角度则要根据此刻的时分秒进行计算得到,代码如下:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> move() {
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> setInterval(<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">() {
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 获取当前时刻</span>
<span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 0, 255, 1)">var</span> date = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Date();
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span> <span style="color: rgba(0, 0, 255, 1)">var</span> sec =<span style="color: rgba(0, 0, 0, 1)"> date.getSeconds();
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 0, 255, 1)">var</span> min =<span style="color: rgba(0, 0, 0, 1)"> date.getMinutes();
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 0, 255, 1)">var</span> hour =<span style="color: rgba(0, 0, 0, 1)"> date.getHours();
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 计算各指针对应的角度</span>
<span style="color: rgba(0, 128, 128, 1)"> 9</span> <span style="color: rgba(0, 0, 255, 1)">var</span> secAngle = sec * 6 - 90; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> s*6-90</span>
<span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(0, 0, 255, 1)">var</span> minAngle = min * 6 + sec * 0.1 - 90; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> m*6+s*0.1-90</span>
<span style="color: rgba(0, 128, 128, 1)">11</span> <span style="color: rgba(0, 0, 255, 1)">var</span> hourAngle = hour * 30 + min * 0.5 - 90; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> h*30+m*0.5 - 90</span>
<span style="color: rgba(0, 128, 128, 1)">12</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 转动指针</span>
<span style="color: rgba(0, 128, 128, 1)">13</span> $(".p-sec").css("transform", "rotate(" + secAngle + "deg)"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">14</span> $(".p-min").css("transform", "rotate(" + minAngle + "deg)"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">15</span> $(".p-hour").css("transform", "rotate(" + hourAngle + "deg)"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">16</span> }, 1000<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">17</span> }</pre>
</div>
<p> </p>
<h2>二、数字时钟</h2>
<h3>1.最终效果</h3>
<p> 用 CSS 绘制的数字时钟效果如下:</p>
<p> <img src="https://img2018.cnblogs.com/i-beta/1450803/202002/1450803-20200223135945200-173125200.png" alt=""></p>
<p> HTML 中代码结构为:</p>
<blockquote>
<div><body></div>
<div> <div class="back"></div>
<div> <div class="content"></div>
<div> <div class="one"><span style="background-color: initial"> </div></span></div>
<div> <div class="two"><span style="background-color: initial"></div></span></div>
<div> <div class="three"><span style="background-color: initial"></div></span></div>
<div> <div class="four"><span style="background-color: initial"></div></span></div>
<div> <div class="five"><span style="background-color: initial"></div></span></div>
<div> <div class="six"><span style="background-color: initial"></div></span></div>
<div> <div class="seven"></div></div>
<div> <div class="eight"><span style="background-color: initial"></div></span></div>
<div> </div></div>
<div> </div></div>
<div></body></div>
</blockquote>
<p> 其中 back 类是时钟的背景,content 类则是数字时钟表盘,在 content 类的 div 中包含了八个 div,分别表示六个数字和两个分隔符号。</p>
<h3>2.绘制数字</h3>
<p> 每一个数字由七个部分组成,每个部分都类似下图中的样式:</p>
<p> <img src="https://img2018.cnblogs.com/i-beta/1450803/202002/1450803-20200223140427705-1143749704.png" alt=""></p>
<p> 这就是一个矩形,两端分别有一个三角形,而这两个三角形都可以通过使用伪元素 before 和 after 实现,实现的代码如下:</p>
<div class="cnblogs_code">
<pre>.part-1<span style="color: rgba(0, 0, 0, 1)"> {
width: 30px;
height: 6px;
background: white;
position: absolute;
left: 10px;
}
.part</span>-1<span style="color: rgba(0, 0, 0, 1)">::before {
content: </span>""<span style="color: rgba(0, 0, 0, 1)">;
position: absolute;
left: </span>-<span style="color: rgba(0, 0, 0, 1)">6px;
width: </span>0<span style="color: rgba(0, 0, 0, 1)">;
height: </span>0<span style="color: rgba(0, 0, 0, 1)">;
border</span>-<span style="color: rgba(0, 0, 0, 1)">top: 3px solid white;
border</span>-<span style="color: rgba(0, 0, 0, 1)">left: 3px solid;
border</span>-<span style="color: rgba(0, 0, 0, 1)">right: 3px solid white;
border</span>-<span style="color: rgba(0, 0, 0, 1)">bottom: 3px solid;
}
.part</span>-1<span style="color: rgba(0, 0, 0, 1)">::after {
content: </span>""<span style="color: rgba(0, 0, 0, 1)">;
position: absolute;
left: 30px;
width: </span>0<span style="color: rgba(0, 0, 0, 1)">;
height: </span>0<span style="color: rgba(0, 0, 0, 1)">;
border</span>-<span style="color: rgba(0, 0, 0, 1)">top: 3px solid white;
border</span>-<span style="color: rgba(0, 0, 0, 1)">left: 3px solid white;
border</span>-<span style="color: rgba(0, 0, 0, 1)">right: 3px solid;
border</span>-<span style="color: rgba(0, 0, 0, 1)">bottom: 3px solid;
}</span></pre>
</div>
<p> 通过修改 CSS 样式就能将其余部分绘制出来了,除了绘制数字,还需要把每两个数字间的分隔符号给绘制出来,如下图:</p>
<p> <img src="https://img2018.cnblogs.com/i-beta/1450803/202002/1450803-20200223141311152-1647740693.png" alt=""></p>
<h3>3.显示数字</h3>
<p> 要显示数字0-9,需要将七个部分中的某些部分进行改动,例如将背景色修改成黑色,就能达到显示数字的效果,如下:</p>
<p> <img src="https://img2018.cnblogs.com/i-beta/1450803/202002/1450803-20200223143540109-1037439376.png" alt=""></p>
<p> 显示数字的代码如下,其中 showDigit() 需要传入两个参数,name 表示的是显示第几位数字的 CSS 类名,num 表示的是要显示的数字:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> showDigit(name, num) {
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> show digit</span>
<span style="color: rgba(0, 128, 128, 1)"> 3</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (num === 1<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span> $(name + " .part-1").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span> $(name + " .part-1").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span> $(name + " .part-2").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span> $(name + " .part-2").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span> $(name + " .part-3").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span> $(name + " .part-3").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">10</span> $(name + " .part-6").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">11</span> $(name + " .part-6").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">12</span> $(name + " .part-7").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">13</span> $(name + " .part-7").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">14</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (num === 2<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">16</span> $(name + " .part-5").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">17</span> $(name + " .part-5").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">18</span> $(name + " .part-6").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">19</span> $(name + " .part-6").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">20</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">21</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (num === 3<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">22</span> $(name + " .part-6").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">23</span> $(name + " .part-6").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">24</span> $(name + " .part-7").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">25</span> $(name + " .part-7").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">26</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">27</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (num === 4<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">28</span> $(name + " .part-1").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">29</span> $(name + " .part-1").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">30</span> $(name + " .part-3").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">31</span> $(name + " .part-3").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">32</span> $(name + " .part-7").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">33</span> $(name + " .part-7").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">34</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">35</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (num === 5<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">36</span> $(name + " .part-4").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">37</span> $(name + " .part-4").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">38</span> $(name + " .part-7").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">39</span> $(name + " .part-7").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">40</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">41</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (num === 6<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">42</span> $(name + " .part-4").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">43</span> $(name + " .part-4").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">44</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">45</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (num === 7<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">46</span> $(name + " .part-2").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">47</span> $(name + " .part-2").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">48</span> $(name + " .part-3").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">49</span> $(name + " .part-3").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">50</span> $(name + " .part-6").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">51</span> $(name + " .part-6").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">52</span> $(name + " .part-7").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">53</span> $(name + " .part-7").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">54</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">55</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (num === 9<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">56</span> $(name + " .part-7").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">57</span> $(name + " .part-7").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">58</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">59</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (num === 0<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">60</span> $(name + " .part-2").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">61</span> $(name + " .part-2").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">62</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">63</span> }</pre>
</div>
<p> 在上面的代码中,每次改动都要 addClass("change"),其中 change 类是一个新的 class,用于对伪元素进行覆盖,相应代码为:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">.change::before {
border: </span>0<span style="color: rgba(0, 0, 0, 1)">;
}
.change::after {
border: </span>0<span style="color: rgba(0, 0, 0, 1)">;
}</span></pre>
</div>
<h3>4.显示时间</h3>
<p> 首先需要使用 JavaScript 获取当前时间,然后计算得到六个数字,再使用上面的 showDigit() 来显示数字,效果如下:</p>
<p> <img src="https://img2018.cnblogs.com/i-beta/1450803/202002/1450803-20200223142657497-660502952.png" alt=""></p>
<p> 显示时间的代码为:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> getDigit() {
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> get the present time</span>
<span style="color: rgba(0, 128, 128, 1)"> 3</span> <span style="color: rgba(0, 0, 255, 1)">var</span> date = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Date();
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 0, 255, 1)">var</span> hour =<span style="color: rgba(0, 0, 0, 1)"> date.getHours();
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span> <span style="color: rgba(0, 0, 255, 1)">var</span> min =<span style="color: rgba(0, 0, 0, 1)"> date.getMinutes();
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 0, 255, 1)">var</span> sec =<span style="color: rgba(0, 0, 0, 1)"> date.getSeconds();
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> six digits</span>
<span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)"> d1, d2, d3, d4, d5, d6;
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span> d1 = parseInt(hour / 10<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">10</span> d2 = hour % 10<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">11</span> d3 = parseInt(min / 10<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">12</span> d4 = min % 10<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">13</span> d5 = parseInt(sec / 10<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">14</span> d6 = sec % 10<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">15</span> showDigit(".one"<span style="color: rgba(0, 0, 0, 1)">, d1);
</span><span style="color: rgba(0, 128, 128, 1)">16</span> showDigit(".two"<span style="color: rgba(0, 0, 0, 1)">, d2);
</span><span style="color: rgba(0, 128, 128, 1)">17</span> showDigit(".four"<span style="color: rgba(0, 0, 0, 1)">, d3);
</span><span style="color: rgba(0, 128, 128, 1)">18</span> showDigit(".five"<span style="color: rgba(0, 0, 0, 1)">, d4);
</span><span style="color: rgba(0, 128, 128, 1)">19</span> showDigit(".seven"<span style="color: rgba(0, 0, 0, 1)">, d5);
</span><span style="color: rgba(0, 128, 128, 1)">20</span> showDigit(".eight"<span style="color: rgba(0, 0, 0, 1)">, d6);
</span><span style="color: rgba(0, 128, 128, 1)">21</span> }</pre>
</div>
<h3>5.时间变换</h3>
<p> 由于我们显示数字的时候不仅修改了背景色,而且还增加了一个新的 class,所以在时间变换的时候,不仅需要修改显示的数字,还需要对相应的 CSS 进行修改,这样才能正确的变换时间。实现的具体方法为每次显示数字时,先把每个部分的 CSS 重置成最开始的样子,背景色改为白色,因而显示数字的代码改为:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> showDigit(name, num) {
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> initial</span>
<span style="color: rgba(0, 128, 128, 1)"> 3</span> $(name + " .part-1").css("background", "white"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span> $(name + " .part-1").removeClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span> $(name + " .part-2").css("background", "white"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span> $(name + " .part-2").removeClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span> $(name + " .part-3").css("background", "white"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span> $(name + " .part-3").removeClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span> $(name + " .part-4").css("background", "white"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">10</span> $(name + " .part-4").removeClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">11</span> $(name + " .part-5").css("background", "white"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">12</span> $(name + " .part-5").removeClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">13</span> $(name + " .part-6").css("background", "white"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">14</span> $(name + " .part-6").removeClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">15</span> $(name + " .part-7").css("background", "white"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">16</span> $(name + " .part-7").removeClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">17</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> show digit</span>
<span style="color: rgba(0, 128, 128, 1)">18</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (num === 1<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">19</span> $(name + " .part-1").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">20</span> $(name + " .part-1").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">21</span> $(name + " .part-2").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">22</span> $(name + " .part-2").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">23</span> $(name + " .part-3").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">24</span> $(name + " .part-3").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">25</span> $(name + " .part-6").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">26</span> $(name + " .part-6").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">27</span> $(name + " .part-7").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">28</span> $(name + " .part-7").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">29</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">30</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (num === 2<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">31</span> $(name + " .part-5").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">32</span> $(name + " .part-5").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">33</span> $(name + " .part-6").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">34</span> $(name + " .part-6").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">35</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">36</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (num === 3<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">37</span> $(name + " .part-6").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">38</span> $(name + " .part-6").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">39</span> $(name + " .part-7").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">40</span> $(name + " .part-7").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">41</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">42</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (num === 4<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">43</span> $(name + " .part-1").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">44</span> $(name + " .part-1").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">45</span> $(name + " .part-3").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">46</span> $(name + " .part-3").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">47</span> $(name + " .part-7").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">48</span> $(name + " .part-7").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">49</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">50</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (num === 5<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">51</span> $(name + " .part-4").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">52</span> $(name + " .part-4").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">53</span> $(name + " .part-7").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">54</span> $(name + " .part-7").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">55</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">56</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (num === 6<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">57</span> $(name + " .part-4").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">58</span> $(name + " .part-4").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">59</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">60</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (num === 7<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">61</span> $(name + " .part-2").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">62</span> $(name + " .part-2").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">63</span> $(name + " .part-3").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">64</span> $(name + " .part-3").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">65</span> $(name + " .part-6").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">66</span> $(name + " .part-6").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">67</span> $(name + " .part-7").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">68</span> $(name + " .part-7").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">69</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">70</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (num === 9<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">71</span> $(name + " .part-7").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">72</span> $(name + " .part-7").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">73</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">74</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (num === 0<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">75</span> $(name + " .part-2").css("background", "black"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">76</span> $(name + " .part-2").addClass("change"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">77</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">78</span> }</pre>
</div>
<p> </p>
<p><span style="font-size: 14pt">完整代码已上传到 GitHub!</span></p>
<div id="gtx-trans" style="position: absolute; left: 206px; top: 10181px"> </div>
</div>
<div id="MySignature" role="contentinfo">
<div id="AllanboltSignature">
<div>作者:TM0831</div>
<div>出处:https://www.cnblogs.com/TM0831/</div>
<div>本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,否则保留追究法律责任的权利.</div>
<style type="text/css">#AllanboltSignature { border-top: #e0e0e0 1px dashed; border-right: #e0e0e0 1px dashed; border-bottom: #e0e0e0 1px dashed; border-left: #e0e0e0 1px dashed; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 60px; font-family: 微软雅黑; font-size: 14px; background: url("https://images.cnblogs.com/cnblogs_com/allanbolt/226222/o_users_two_warning_48.png") #e5f1f4 no-repeat 1% 50% }
#AllanboltSignature div { line-height: 25px }</style></div><br><br>
来源:https://www.cnblogs.com/TM0831/p/12349622.html
頁:
[1]