问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

怎样用html和css做时钟的转动效果

发布网友 发布时间:2022-04-28 12:15

我来回答

4个回答

懂视网 时间:2022-04-28 16:36

本篇文章给大家带来的内容是关于使用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);

热心网友 时间:2022-04-28 13:44

css 有个 animation 可以实现动画,仅仅是动起来,没法实现实时与系统对时(需要js)
60秒跳动60次旋转360度。(可以使用linear 线性运动)
# animation:anim_mm 60s linear infinite;
animation:mm 60s steps(60) infinite;

@keyframes mm{
to{ transform:rotate(360deg) ;}
}

热心网友 时间:2022-04-28 15:02

时钟转动效果是指旋转一圈吧
一种是鼠标移到上面的时候旋转:用transform:rotate(360deg)配合transition属性
一种是直接旋转,用animation来做

热心网友 时间:2022-04-28 16:37

貌似做不了 是用flash做的
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
ef英语哪个好 EF英孚英语培训怎么样? 英孚英语好不好 EF英孚教育到底好不好 大佬们,麦芒7和荣耀10那个值得入手?2500以下的机子还有啥好推荐的么... 介绍几款2500元以前的手机 像素一定要高 其他的不做要求 近期想入手一部安卓手机,价格2200到2500左右…买HTC desire Z还是 三星... 笔记本忘记开机密码怎么办急死了 笔记本电脑屏幕开机锁忘记密码 怎么办?急死了 华硕笔记本电脑开机密码忘记了怎样找回?系统是Windows 7旗舰版... 我的手机为什么没有视频也不能接收视频呢? 我的手机为什么不能打视频电话? 为什么我的手机不能看视频呢? 洗澡后,皮肤会痒痒的,这是怎么回事? 为什么洗完澡后身上会很痒? 别人的手机能看视频,我的手机为什么不能看视频? 每次洗澡后皮肤为什么会很痒 洗澡后皮肤很痒,怎么办? 每天洗澡之后皮肤都会奇痒,这是什么原因呢 为什么洗完澡身上很痒? 频繁洗澡导致的皮肤瘙痒,怎么弄 冬季洗澡太勤皮肤瘙痒增多,究竟该如何解决此问题? 洗完澡皮肤痒 洗澡后皮肤瘙痒是怎么回事? 洗完澡皮肤发痒是怎么回事? 为什么洗澡后皮肤会痒? 洗完澡后皮肤瘙痒症是怎么回事? 洗完澡皮肤瘙痒是怎么回事? 如何使用零花钱 演讲稿 关于零花钱的作文 一个人可以有两个? 一个手机号码可以有两个吗 一个人能申请两个吗?? 微信,我一个手机两张卡可以注册两个吗? 怎样可以有两个? 双卡手机怎么用两个? 双卡手机怎么用两个? 怎么可以申请两个? 有两部手机能注册两个吗? 同一个人的手机号和qq号分别能申请两个吗? 一个手机号能申请两个吗? 怎样可以有两个? ...电力局中招标的故障定位系统原理?一遥,二遥,三遥具体指的是什么? 监控系统定义中“四遥”指的是什么? 谁能解释下JS实现的时钟功能代码的意义吗?万分感谢! 断路器遥信是什么意思,四遥的功能谁能帮解释一下 4月1号银行利率会上调吗? 今天我去邮政储蓄银行存款,本想存一年的 可工作人员说存两年的利息有4,1的利息。这是真的吗? 4.1号银行要长利息吗 听说银行利率又上调了?真的吗?