最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

使用css3和js实现一个钟表代码过程

来源:动视网 责编:小采 时间:2020-11-02 22:08:20
文档

使用css3和js实现一个钟表代码过程

使用css3和js实现一个钟表代码过程:本篇文章给大家带来的内容是关于使用css3和js实现一个钟表代码过程,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。有一天看到css3旋转这个属性,突发奇想的写了一个钟表(没做浏览器兼容),来一起看看是怎么写的吧!先给个成品图,最终结果是
推荐度:
导读使用css3和js实现一个钟表代码过程:本篇文章给大家带来的内容是关于使用css3和js实现一个钟表代码过程,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。有一天看到css3旋转这个属性,突发奇想的写了一个钟表(没做浏览器兼容),来一起看看是怎么写的吧!先给个成品图,最终结果是
本篇文章给大家带来的内容是关于使用css3和js实现一个钟表代码过程,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

有一天看到css3旋转这个属性,突发奇想的写了一个钟表(没做浏览器兼容),来一起看看是怎么写的吧!

先给个成品图,最终结果是个样子的(动态的).

      

首先,思考了一下页面的布局,大致需要4层p,最底层是一个表盘的背景图,然后其余3层分别是时针,分针,秒针的图层.

html代码如下

<div class="dial">
</div>
<div class="bigdiv bigdiv1" id="secondHand">
 <div class="secondHand"></div>
</div>
<div class="bigdiv bigdiv2" id="minuteHand">
 <div class="minuteHand"></div>
</div>
<div class="bigdiv bigdiv3" id="hourHand">
 <div class="center"></div>
 <div class="hourHand"></div>
</div>

变量名是随便起的,不要介意; class=center的这个p是表中心那个小黑点.

时针是60*60*60s转一圈, 分针是60*60s转一圈, 秒针是60s转一圈, 所以css代码如下 ↓

.dial{
 width:600px;
 height:600px;
 margin:0 auto;
 position: absolute;
 border-radius: 50%;
 overflow: hidden;
 background-color: rgba(153,50,204,0.2);
 background-image: url(img/表盘.jpg);
 background-size: 100% 100%;
}
.bigdiv{
 width:600px;
 height:600px;
 margin:0 auto;
 position: absolute;
 border-radius: 50%;
 overflow: hidden;
}
.bigdiv>div{
 position: absolute;
 left:298px;
 border-radius: 100px;
}
.bigdiv1{
 animation: moves 60s steps(60) infinite;
}
.bigdiv1 .secondHand{
 width:4px;
 height:250px;
 background-color: red;
 top:50px;
 left:298px;
}
.bigdiv2{
 animation: moves 3600s steps(3600) infinite;
}
.bigdiv2 .minuteHand{
 width:6px;
 height:180px;
 background-color: green;
 top:120px;
 left:297px;
}
.bigdiv3{
 animation: moves 216000s steps(216000) infinite;
}
.bigdiv3 .hourHand{
 width:8px;
 height:160px;
 background-color: orange;
 top:140px;
 left:296px;
 border-radius: 100px;
}
.bigdiv .center{
 top:290px;
 left:290px;
 width:20px;
 height:20px;
 background-color: black;
 z-index: 2;
}
@keyframes moves{
 from{ transform: rotateZ(0deg); }
 to{ transform: rotateZ(360deg); }
}

这一步做完后效果图是这个样子的:

初步定型图

然后用js计算当前时间,

var date = new Date();
var hours = date.getHours();
var minutes = date.getMinutes();
var seconds = date.getSeconds();

然后计算当前每个针的旋转角度

var secondAngle = seconds;
var minuteAngle = minutes * 60 + seconds;
var hourAngle = (60/12) * ((hours%12) * 3600 + minuteAngle);

现在的思路就是:每个针会按照自己定的时间转一圈,初始角度也能知道,怎么组成一个显示当前时间的动态钟表呢?

刚开始的想法是让这3层p旋转对应的角度,然后再开始,后来一想不行,因为它还是固定的时间旋转一周,指针指向会有偏差,

现在需要的是页面进来的第一圈旋转固定角度,其余的按照原来固定的时间旋转一周就行了,

css3里面有一个animation-delay属性,它表示的意思是动画延迟,负数就表示提前开始(比如-5s就表示动画从第5s的时间开始),

刚好可以用到,让这几个指针提前开始对应的角度.

js代码如下

hourHand.style.cssText = "animation-delay: -"+ hourAngle +"s";
minuteHand.style.cssText = "animation-delay: -"+ minuteAngle +"s";
secondHand.style.cssText = "animation-delay: -"+ secondAngle +"s";

最后自己再加了个动态时间在钟表的上面展示

下面是整理后的完整代码,复制粘贴即可使用

CSS

body,html{
 margin:0;
}
.location{
 position: relative;
 width:600px;
 height:600px;
 left: calc(50% - 300px);
}
.dial{
 width:600px;
 height:600px;
 margin:0 auto;
 position: absolute;
 border-radius: 50%;
 overflow: hidden;
 background-color: rgba(153,50,204,0.2);
 background-image: url(img/表盘.jpg);
 background-size: 100% 100%;
}
.bigdiv{
 width:600px;
 height:600px;
 margin:0 auto;
 position: absolute;
 border-radius: 50%;
 overflow: hidden;
}
.bigdiv>div{
 position: absolute;
 left:298px;
 border-radius: 100px;
}
.bigdiv1{
 animation: moves 60s steps(60) infinite;
}
.bigdiv1 .secondHand{
 width:4px;
 height:250px;
 background-color: red;
 top:50px;
 left:298px;
}
.bigdiv2{
 animation: moves 3600s steps(3600) infinite;
}
.bigdiv2 .minuteHand{
 width:6px;
 height:180px;
 background-color: green;
 top:120px;
 left:297px;
}
.bigdiv3{
 animation: moves 216000s steps(216000) infinite;
}
.bigdiv3 .hourHand{
 width:8px;
 height:160px;
 background-color: orange;
 top:140px;
 left:296px;
 border-radius: 100px;
}
.bigdiv .center{
 top:290px;
 left:290px;
 width:20px;
 height:20px;
 background-color: black;
 z-index: 2;
}
@keyframes moves{
 from{ transform: rotateZ(0deg); }
 to{ transform: rotateZ(360deg); }
}
#dateshow{
 text-align: center;
}

html代码

<h1 id="dateshow"></h1>
<div class="location">
<div class="dial">
</div>
<div class="bigdiv bigdiv1" id="secondHand">
 <div class="secondHand"></div>
</div>
<div class="bigdiv bigdiv2" id="minuteHand">
 <div class="minuteHand"></div>
</div>
<div class="bigdiv bigdiv3" id="hourHand">
 <div class="center"></div>
 <div class="hourHand"></div>
</div>
</div>

js代码

var dateshow = document.getElementById("dateshow");
var clock = {
 weeks : ["一","二","三","四","五","六","日"],
 getDate:function(){
 date = new Date();
 year = date.getFullYear();
 month = date.getMonth()+1;
 day = date.getDate();
 hours = date.getHours();
 minutes = date.getMinutes();
 seconds = date.getSeconds();
 week = date.getDay(); // 星期
 dateText = year+"年"+month+"月"+clock.format(day)+"日 星期"+clock.formatnum(week)+" "+
 clock.format(hours)+":"+clock.format(minutes)+":"+clock.format(seconds);
 return dateText;
 },
 format:function (data){
 if(data.toString().length == 1){
 data = "0" + data;
 };
 return data;
 },
 formatnum:function (num){
 return clock.weeks[num-1];
 },
 showdate:function (){
 dateshow.innerText = clock.getDate();
 },
 go:function (){
 var secondHand = document.getElementById("secondHand");
 var minuteHand = document.getElementById("minuteHand");
 var hourHand = document.getElementById("hourHand");
 date = new Date();
 hours = date.getHours();
 minutes = date.getMinutes();
 seconds = date.getSeconds();
 var secondAngle = seconds;
 var minuteAngle = minutes * 60 + seconds;
 var hourAngle = (60/12) * ((hours%12) * 3600 + minuteAngle);
 hourHand.style.cssText = "animation-delay: -"+ hourAngle +"s";
 minuteHand.style.cssText = "animation-delay: -"+ minuteAngle +"s";
 secondHand.style.cssText = "animation-delay: -"+ secondAngle +"s";
 }
 
}
clock.go();
clock.showdate();
setInterval("clock.showdate()",1000);

文档

使用css3和js实现一个钟表代码过程

使用css3和js实现一个钟表代码过程:本篇文章给大家带来的内容是关于使用css3和js实现一个钟表代码过程,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。有一天看到css3旋转这个属性,突发奇想的写了一个钟表(没做浏览器兼容),来一起看看是怎么写的吧!先给个成品图,最终结果是
推荐度:
标签: 一个 有一个 使用
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top