这就是我说的简易的表盘,有点简陋了 QaQcss
刚学习的时钟动画,以为还有不少东西要去学习,有时候发现代码真是很神奇的。
首先呢 咱们须要有一个圆的轮廓,这个就是定义一个div宽和高相同,而后用到了一个css3的属性 border-radius:50% 50% 固然只要是大于等于50%都是能够成圆的。
轮廓作出来后咱们须要插入60个表盘上的刻度。这个时候有两种办法 html
1.能够用dom进行插入css3
var oDial=document.getElementById("dial"); for(var i=0;i<60;i++) { var oLi=document.createElement("li"); oDial.appendChild(oLi); }
2.能够用html结构插入app
var Lis=""; for(var i=0;i<60;i++) { Lis+="<li ></li>"; } oDial.innerHTML=Lis;
表盘刻度插入之后呢咱们须要对这60个刻度进行定位写出旋转的原点而后每一个刻度都在上一个刻度的基础上多旋转6° 咱们须要写出表针用三个div分别表示时针 分针 秒针而且这三个须要在一个点上进行旋转 那就是三个div的底部dom
而后咱们应该知道如今所处的时间是多少 这是咱们须要用到js了。
建立一个Date的对象 而且用三个变量分别表示小时 分钟 秒并存放到一个函数中。函数
var now=new Date(); var hour=now.getHours(); var second=now.getSeconds(); var minute=now.getMinutes();
当获得时间之后 获得这三个dom对象学习
var oSecond=document.getElementById("second"); var oMinute=document.getElementById("minute"); var oHour=document.getElementById("hour");
当获得这三个dom对象时须要进行转动用到transform:rotate(度数)动画
oSecond.style.transform="rotate("+ second * 6+"deg)"; oMinute.style.transform="rotate("+ minute*6 +"deg)"; oHour.style.transform="rotate("+( hour*30+minute/60 *30 )+"deg)";
最后封装好的函数run的代码以下:
function run() {spa
var now=new Date(); var hour=now.getHours(); var second=now.getSeconds(); var minute=now.getMinutes(); oSecond.style.transform="rotate("+ second * 6+"deg)"; oMinute.style.transform="rotate("+ minute*6 +"deg)"; oHour.style.transform="rotate("+( hour*30+minute/60 *30 )+"deg)";
这样只能转动一次 咱们须要开一个定时器把run这个函数放进去code
setInterval(run,1000);
<div id="clock"> <ul id="dial"></ul> <div id="second"></div> <div id="minute"></div> <div id="hour"></div> </div>
* { padding: 0; margin: 0; } #clock { width: 200px; height: 200px; border-radius: 50%; border: 1px solid ; margin: 200px auto; position: relative; } li { list-style: none; width: 2px; height: 6px; background: black; position: absolute; left: 100px; top: 0; transform-origin: 0 100px; } #dial li:nth-child(5n+1) { height: 10px; } #clock div { transform-origin: bottom; } #hour{ width: 4px; height: 40px; background: #000000; position: absolute; left: 98px; top: 60px; } #minute{ width: 4px; height: 60px; background: #999; position: absolute; left: 98px; top: 40px; } #second{ width: 2px; height: 70px; background: #ff0000; position: absolute; left: 99px; top: 30px; }
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> * { padding: 0; margin: 0; } #clock { width: 200px; height: 200px; border-radius: 50%; border: 1px solid ; margin: 200px auto; position: relative; } li { list-style: none; width: 2px; height: 6px; background: black; position: absolute; left: 100px; top: 0; transform-origin: 0 100px; } #dial li:nth-child(5n+1) { height: 10px; } #clock div { transform-origin: bottom; } #hour{ width: 4px; height: 40px; background: #000000; position: absolute; left: 98px; top: 60px; } #minute{ width: 4px; height: 60px; background: #999; position: absolute; left: 98px; top: 40px; } #second{ width: 2px; height: 70px; background: #ff0000; position: absolute; left: 99px; top: 30px; } </style> </head> <body> <div id="clock"> <ul id="dial"></ul> <div id="second"></div> <div id="minute"></div> <div id="hour"></div> </div> <script> var oClock=document.getElementById("clock"); var oDial=document.getElementById("dial"); var oSecond=document.getElementById("second"); var oMinute=document.getElementById("minute"); var oHour=document.getElementById("hour"); var Lis=""; for(var i=0;i<60;i++) { // var oLi=document.createElement("li"); // oDial.appendChild(oLi); Lis+="<li style='transform: rotate("+ i * 6+"deg)'></li>"; } oDial.innerHTML=Lis; function run() { var now=new Date(); var hour=now.getHours(); var second=now.getSeconds(); var minute=now.getMinutes(); oSecond.style.transform="rotate("+ second * 6+"deg)"; oMinute.style.transform="rotate("+ minute*6 +"deg)"; oHour.style.transform="rotate("+( hour*30+minute/60 *30 )+"deg)"; } run(); setInterval(run,1000); </script> </body> </html>
写的很差 还望各位指出错误 共同进步。