css3 利用transform打造走动的2D时钟


Posted in HTML / CSS onOctober 20, 2020

学完了transform这个课程,还是来一个案例吧,利用transform的旋转rotate打造一个时钟,再结合JavaScript的定时器让它走起来。

截一个动图:

css3 利用transform打造走动的2D时钟

案例知识点分析:

1、利用定位完成时钟的绘制。

2、背景使用了放射性渐变。

3、利用JavaScript完成刻度和时间数字的旋转。

4、利用Date()对象获取系统时间,并让时针指向对应的刻度。

5、利用定时器不断更新时间,完成时针的运动。

一、HTML源代码

<div id="clock-wrap">
	<div id="clock">
    	<ul id="list">
        </ul>
    </div>
    <div id="num">
    	<ul>
        	<li>12</li>
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
            <li>6</li>
            <li>7</li>
            <li>8</li>
            <li>9</li>
            <li>10</li>
            <li>11</li>
        </ul>
    </div>
    <div id="hour"></div>
    <div id="min"></div>
    <div id="sec"></div>
    <div id="circle"></div>
</div>

二、CSS样式

<style id="css">/*注意这里为style标签添加了一个id,在JavaScript里面有获取,并往里面添加css样式。*/
body,ul{
	margin:0;
	padding:0;}
body{
	font:1em "microsoft Yahei";
	color:#666;
	background-color:#333;}
h1{
	text-align:center;
	color:#eee;
	font-size:3rem;}
li{
	list-style:none;}
p{
	text-align:center;
	color:#ddd;
	position:relative;
	top:100px;
	}
a{
	color:#999;
	text-decoration:none;
	transition:0.2s;}
a:hover{
	color:#ddd;}
#clock-wrap{
	width:400px;
	height:400px;
	border:10px solid #fff;
	border-radius:50%;
	margin:80px auto 0;
	position:relative;
	box-shadow:0 0 40px rgba(0,0,0,1)}
#clock ul{
	width:400px;
	height:400px;
	position:relative;
	border-radius:50%;
	background:radial-gradient(circle at center,#667eea,#764ba2);
	box-shadow:0 0 50px rgba(0,0,0,0.5) inset; /*设置内阴影*/
	}
#clock ul li{
	position:absolute;
	left:50%;
	margin-left:-2px;
	top:0;
	width:4px;
	height:10px;
	background:rgba(255,255,255,.5);
	transform-origin:center 200px; /*li的旋转中心点在圆形中间。*/
	}
#clock li:nth-child(5n+1){ /*5个刻度为一组,每一组的第一个刻度要长一点。*/
	height:18px;
	}
#num{
	position:absolute;
	width:360px;
	height:360px;
	left:0;
	right:0;
	top:0;
	bottom:0;
	margin:auto;
	}
#num li{
	position:absolute;
	left:50%;
	margin-left:-10px;
	top:0;
	color:rgba(255,255,255,.5);
	font:2em Arial, Helvetica, sans-serif;	
	transform-origin:center 180px;}

#hour,#min,#sec{
	background:#fff;
	position:absolute;
	left:50%;
	top:50%;
	transform-origin:bottom; /*时针的旋转点在自己的底部。*/
	box-shadow:0 0 6px rgba(0,0,0,.5)
	}
#hour{
	width:14px;
	height:100px;
	margin-left:-7px;
	margin-top:-100px;
	border-radius:3px;
	}
#min{
	width:10px;
	height:150px;
	margin-left:-5px;
	margin-top:-150px;
	border-radius:2px;
	}
#sec{
	width:4px;
	height:180px;
	margin-left:-2px;
	margin-top:-180px;
	border-radius:1px;
	}
#circle{
	width:40px;
	height:40px;
	border-radius:50%;
	background:#fff;
	position:absolute;
	left:50%;
	margin-left:-20px;
	top:50%;
	margin-top:-20px;
	box-shadow:0 0 20px rgba(0,0,0,.4)}
</style>

三、JavaScript代码

<script>
window.onload=function(){
	var oList=document.getElementById("list");
	var oCSS=document.getElementById("css"); //style标签也可以加id属性。
	var aNums=document.getElementById("num").getElementsByTagName("li");
	var oHour=document.getElementById("hour");
	var oMin=document.getElementById("min");
	var oSec=document.getElementById("sec");
	var aLi="";
	var sCSS="";
	for(var i=0;i<60;i++){ //循环60次,产生刻度值和每一个刻度旋转的度数。
		aLi+="<li></li>";
		sCSS+="#clock li:nth-child("+(i+1)+"){transform:rotate("+i*6+"deg);}"
		}
	for(var i=0;i<12;i++){
		sCSS+="#num li:nth-child("+(i+1)+"){transform:rotate("+i*30+"deg);}"
		}
	oList.innerHTML=aLi;
	oCSS.innerHTML+=sCSS;  //css需要追加到原来的css文档中。
	
	
	
	myTime();  //初始化函数。
	setInterval(myTime,1000);    //设置定时器,每隔1秒执行一次函数。
	function myTime(){
		var oDate=new Date();
		var iSec=oDate.getSeconds(); 
		//精确到秒数的分钟数。
		var iMin=oDate.getMinutes()+iSec/60; 
		//精确到分秒的小时数。可以在旋转的时候更精确。
		var iHour=oDate.getHours()+iMin/60;
		
		oSec.style.transform="rotate("+iSec*6+"deg)" ;
		oMin.style.transform="rotate("+iMin*6+"deg)";
		oHour.style.transform="rotate("+iHour*30+"deg)"; //时针的指向需要把分钟和秒数算进去才精确。
		}
	
	}
</script>

以上就是css3 利用transform打造走动的2D时钟的详细内容,更多关于CSS3 transform的资料请关注三水点靠木其它相关文章!

HTML / CSS 相关文章推荐
任意一块网页内容实现“活”的背景(目前火狐浏览器专有)
May 07 HTML / CSS
CSS3 Pie工具推荐--让IE6-8支持一些优秀的CSS3特性
Sep 02 HTML / CSS
CSS3实现红包抖动效果
Dec 23 HTML / CSS
html5 application cache遇到的严重问题
Dec 26 HTML / CSS
html5 Canvas画图教程(5)—canvas里画曲线之arc方法
Jan 09 HTML / CSS
html5实现微信打飞机游戏
Mar 27 HTML / CSS
HTML5 visibilityState属性详细介绍和使用实例
May 03 HTML / CSS
html5版canvas自由拼图实例
Oct 15 HTML / CSS
使用分层画布来优化HTML5渲染的教程
May 08 HTML / CSS
HTML5手机端弹出遮罩菜单特效代码
Jan 27 HTML / CSS
html5 视频播放解决方案
Nov 06 HTML / CSS
html+css实现赛博朋克风格按钮
May 26 HTML / CSS
详解CSS3中常用的样式【基本文本和字体样式】
Oct 20 #HTML / CSS
详解css3使用transform出现字体模糊的解决办法
Oct 16 #HTML / CSS
css3实现文字首尾衔接跑马灯的示例代码
Oct 16 #HTML / CSS
CSS3 transition 实现通知消息轮播条
Oct 14 #HTML / CSS
animation和transition的区别
Oct 12 #HTML / CSS
CSS3 rgb and rgba(透明色)的使用详解
Sep 25 #HTML / CSS
详解CSS3弹性伸缩盒
Sep 21 #HTML / CSS
You might like
php代码运行时间查看类代码分享
2011/08/06 PHP
PHP中使用mktime获取时间戳的一个黑色幽默分析
2012/05/31 PHP
thinkphp在php7环境下提示Cannot use ‘String’ as class name as it is reserved的解决方法
2016/09/30 PHP
php事件驱动化设计详解
2016/11/10 PHP
对laravel in 查询的使用方法详解
2019/10/09 PHP
基于jquery的固定表头和列头的代码
2012/05/03 Javascript
javascript parseInt() 函数的进制转换注意细节
2013/01/08 Javascript
html组件不可输入(只读)同时任何组件都有效
2013/04/01 Javascript
如何获取select下拉框的值(option没有及有value属性)
2013/11/08 Javascript
SWFUpload多文件上传及文件个数限制的方法
2016/05/31 Javascript
Vue.js动态添加、删除选题的实例代码
2016/09/30 Javascript
C#微信小程序服务端获取用户解密信息实例代码
2017/03/10 Javascript
Node.js使用Express创建Web项目详细教程
2017/03/31 Javascript
打造通用的匀速运动框架(实例讲解)
2017/10/17 Javascript
jquery中ajax请求后台数据成功后既不执行success也不执行error的完美解决方法
2017/12/24 jQuery
JS实现关键词高亮显示正则匹配
2018/06/22 Javascript
基于JavaScript实现每日签到打卡轨迹功能
2018/11/29 Javascript
详解基于iview-ui的导航栏路径(面包屑)配置
2019/02/22 Javascript
js贪心算法 钱币找零问题代码实例
2019/09/11 Javascript
JavaScript相等运算符的九条规则示例详解
2019/10/20 Javascript
微信小程序修改checkbox的样式代码实例
2020/01/21 Javascript
uniapp,微信小程序中使用 MQTT的问题
2020/07/11 Javascript
[46:38]完美世界DOTA2联赛PWL S2 Magma vs PXG 第三场 11.28
2020/12/02 DOTA
pandas 实现将重复表格去重,并重新转换为表格的方法
2018/04/18 Python
Python Socket多线程并发原理及实现
2020/12/11 Python
python在协程中增加任务实例操作
2021/02/28 Python
深深扎根运动世界的生活品牌:Tillys
2017/10/30 全球购物
应用心理学个人求职信范文
2013/12/11 职场文书
简历里的自我评价范文
2014/02/24 职场文书
销售员岗位职责范本
2015/04/11 职场文书
英语专业毕业论文答辩开场白
2015/05/27 职场文书
水浒传读书笔记
2015/06/25 职场文书
详细了解java监听器和过滤器
2021/07/09 Java/Android
Go语言并发编程 sync.Once
2021/10/16 Golang
前端传参数进行Mybatis调用mysql存储过程执行返回值详解
2022/08/14 MySQL
win11电脑关机鼠标灯还亮怎么解决? win11关机后鼠标灯还亮解决方法
2023/01/09 数码科技