原生JS时钟

<!doctype html>
<html>

	<head>
		<meta charset="utf-8">
		<title>无标题文档</title>
		<style id="css">
			#wrap {
				position: relative;
				width: 200px;
				height: 200px;
				margin: 50px auto;
				border-radius: 50%;
				border: 2px solid #000;
			}
			
			#wrap ul {
				margin: 0;
				padding: 0;
				position: relative;
				list-style: none;
			}
			
			#wrap ul li {
				/*left值是99因为要想在中间显示,left值要从其父盒子宽度的一半100开始,因为其本身有2px的宽度,
	所以就退一像素也就是99px 刚好居中,下面定位的时分秒针同样如此,left要根据宽度而变*/
				width: 2px;
				height: 5px;
				background: #000;
				position: absolute;
				left: 99px;
				top: 0;
				/*X轴center Y轴100 意思是从圆的中心点开始旋转(Y轴给100是因为盒子的高是200,相当于半径)*/
				-webkit-transform-origin: center 100px;
			}
			/*钟表一圈是360度,一共12个小时 每个小时之间差360/12=30度,
			 * 每个小时之间差有5个格,所以每个小格之间是30/5=6度
			*/
			/*#wrap ul li:nth-of-type(1){-webkit-transform:rotate(0)}
              #wrap ul li:nth-of-type(2){-webkit-transform:rotate(6deg)}
              #wrap ul li:nth-of-type(3){-webkit-transform:rotate(12deg)}
              #wrap ul li:nth-of-type(4){-webkit-transform:rotate(18deg)}
              #wrap ul li:nth-of-type(5){-webkit-transform:rotate(24deg)}
              #wrap ul li:nth-of-type(6){-webkit-transform:rotate(30deg)}
              #wrap ul li:nth-of-type(7){-webkit-transform:rotate(36deg)}
              #wrap ul li:nth-of-type(8){-webkit-transform:rotate(42deg)}
            */
			/*奇数个时变长,用于表示显示小时的线*/
			
			#wrap ul li:nth-of-type(5n+1) {
				height: 12px;
			}
			/*top给的值和height加起来是一半的盒子高度:100*/
			
			#hour {
				position: absolute;
				left: 97px;
				top: 55px;
				width: 6px;
				height: 45px;
				background: #000;
				-webkit-transform-origin: bottom;
			}
			
			#min {
				position: absolute;
				left: 98px;
				top: 35px;
				width: 4px;
				height: 65px;
				background: #999;
				-webkit-transform-origin: bottom;
			}
			
			#sec {
				position: absolute;
				left: 99px;
				top: 20px;
				width: 2px;
				height: 80px;
				background: red;
				-webkit-transform-origin: bottom;
			}
			
			#ico {
				width: 20px;
				height: 20px;
				background: #000;
				border-radius: 50%;
				position: absolute;
				left: 90px;
				top: 90px;
			}
		</style>
	</head>

	<body>
		<div id="wrap">
			<ul>
				<!--    <li></li>
    	<li></li>
    	<li></li>
    	<li></li>
    	<li></li>
    	<li></li>
    	<li></li>
    	<li></li>
-->
			</ul>
			<div id="hour"></div>
			<div id="min"></div>
			<div id="sec"></div>
			<div id="ico"></div>
		</div>
	</body>

</html>
<script>
	var oUl = document.getElementsByTagName('ul')[0];
	var oCss = document.getElementById('css');
	var oH = document.getElementById('hour');
	var oM = document.getElementById('min');
	var oS = document.getElementById('sec');
	var aLi = '';
	var sCss = '';

	for(var i = 0; i < 60; i++) {
		//JS中计数是从0开始的,所以要i+1
		sCss += '#wrap ul li:nth-of-type(' + (i + 1) + '){-webkit-transform:rotate(' + i * 6 + 'deg)}';
		aLi += '<li></li>'
	}
	//放入html和css中
	oUl.innerHTML = aLi;
	oCss.innerHTML += sCss;

	var timer = null;

	//获取时间
	function toTime() {
		//每次执行前关闭并清除之前的定时器,节约性能
		clearTimeout(timer);
		timer = null;

		//获取当前时间	
		var oDate = new Date();
		//得到此刻时间对应的时分秒
		var iSec = oDate.getSeconds();
		//console.log(iSec)
		//但是如果当前时间是12点半,时针不应该是直直的指向12点,应该是在12和1之间,
		//所以就需要把当前多出的分钟数/60换算成小时数加起来,下面在计算角度的时候也就可以对应上了。
		//分针同样如此
		var iMin = oDate.getMinutes() + iSec / 60;
		var iHour = oDate.getHours() + iMin / 60;
		//得到每一秒的旋转角度(每一秒是走6度)
		oS.style.WebkitTransform = 'rotate(' + iSec * 6 + 'deg)';
		//得到每一分钟走的角度 每一小时之间是30 / 一小时中间有5个格 =30/5=6度 
		oM.style.WebkitTransform = 'rotate(' + iMin * 6 + 'deg)';
		//每小时走360/12=30度
		oH.style.WebkitTransform = 'rotate(' + iHour * 30 + 'deg)';

		//开启定时器,每一秒自动走
		timer = setTimeout(toTime, 1000);
	}
	//执行函数
	toTime();
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值