本文实例为大家分享了js+css3实现简单时钟的具体代码,供大家参考,具体内容如下
1.实现了时钟的特效,可以转动,时间准确,画面美观大气;
2.用到了css3的transform: rotate,transform-origin:,伪元素,border-radius,定位,z-index等等
效果如图:
代码如下:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>CSS3时钟特效</title> <link rel="shortcut icon" type="image/x-icon" href="img/an.ico" /> <style> /*表盘边框*/ .clock { /* 设置大小 */ width: 400px; height: 400px; position: relative; margin: 40px auto; /*上边距*/ border-radius: 50%; /*圆形*/ box-shadow: 5px 5px 20px rgba(0, 0, 0, 0.5); /*表盘阴影*/ background: #F5DEB3; border: 10px solid #FFFF00; } /*画刻度的面板*/ .box { width: 100%; height: 100%; position: absolute; top: 0; left: 0; } /*用来装刻度和数字的div*/ .box div { width: 0px; height: 200px; position: absolute; left: 200px; /*旋转*/ transform: rotate(0deg); /*设置基点为右下角*/ transform-origin: bottom right; background: rgba(255, 0, 0, 0.5); } /*数字*/ .box div i { float: left; margin-top: 20px; margin-left: -10px; font-style: normal; width: 20px; text-align: center; font-style: 18px; } /*小刻度*/ .box div::after { content: ""; position: absolute; background: #484848; width: 2px; height: 10px; left: -1px; } /*大刻度*/ .box div.five::after { position: absolute; content: ""; width: 4px; height: 20px; left: -2px; top: 0; background: #484848; border-radius: 0 0 2px 2px; } /*秒针样式*/ .second { width: 1px; height: 200px; background: red; position: absolute; left: 200px; /*距离表盘宽度一半*/ margin-top: 30px; z-index: 10; transform: rotate(0deg); transform-origin: center 170px; /*定位旋转位置*/ } /*圆心样式*/ .second::after { content: ""; position: absolute; width: 20px; height: 20px; background: red; border-radius: 50%; bottom: 20px; left: -10px; } /*分针样式*/ .minute { width: 2px; height: 140px; background: #8b8b8d; position: absolute; left: 199px; margin-top: 60px; z-index: 9; transform-origin: center bottom; transform: rotate(12deg); animation: minute 60s linear infinite; } /*时针样式*/ .hour { width: 6px; height: 100px; background: #333; position: absolute; left: 197px; margin-top: 100px; z-index: 8; border-radius: 3px; transform: rotate(2deg); transform-origin: center bottom; animation: minute 60s linear infinite; } </style> </head> <body> <div class="clock"> <div class="box"></div> <div class="second"></div> <div class="minute"></div> <div class="hour"></div> </div> <script> var box = document.getElementsByClassName("box")[0]; var ssObj = document.getElementsByClassName("second")[0]; var mmObj = document.getElementsByClassName("minute")[0]; var hhObj = document.getElementsByClassName("hour")[0]; /*获取当前时间*/ var date = new Date(); var hh = date.getHours(); var mm = date.getMinutes(); var ss = date.getSeconds(); /*计算页面指针加载时的角度*/ hhDeg = 360 * (hh % 12) / 12; mmDeg = 360 * mm / 60; ssDeg = 360 * ss / 60; hhObj.style.transform = "rotate(" + hhDeg + "deg)"; mmObj.style.transform = "rotate(" + mmDeg + "deg)"; ssObj.style.transform = "rotate(" + ssDeg + "deg)"; // 定义初始刻度的度数 var Deg = 0; /*画刻度*/ for (var i = 0; i < 60; i++) { var div1 = document.createElement("div"); //创建一个div var hourNum = i / 5; //当为5时 if (hourNum == 0) hourNum = 12; if (i % 5 == 0) { //大刻度 div1.className = "five"; div1.innerHTML = "<i>" + hourNum + "</i>" } div1.style.transform = "rotate(" + Deg + "deg)"; box.appendChild(div1); Deg += 6;// 每两个刻度之间是6度 } /*指针转动的函数*/ function drawSS() { // 秒针的度数 ssDeg = 360 * ss / 60; // 分针的度数 mmDeg1 = 360 * mm / 60; // 时针的度数 hhDeg1 = 360 * (hh % 12) / 12; // 分针每秒走的位置 mmDeg = mmDeg1 + (6 * ss / 60); // 时针每分钟走的位置 hhDeg = hhDeg1 + (30 * mm / 60); hhObj.style.transform = "rotate(" + hhDeg + "deg)"; mmObj.style.transform = "rotate(" + mmDeg + "deg)"; ssObj.style.transform = "rotate(" + ssDeg + "deg)"; ss += 1; if (ss > 60) { ss = 1; mm += 1; } if (mm == 60) { mm = 0; hh += 1; } setTimeout(function() { drawSS(); }, 1000); } drawSS(); </script> </body> </html>
精简版:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>CSS3时钟特效</title> <link rel="shortcut icon" type="image/x-icon" href="img/an.ico" /> <style> /*表盘边框*/ .clock { /* 设置大小 */ width: 400px; height: 400px; position: relative; margin: 40px auto; /*上边距*/ border-radius: 50%; /*圆形*/ box-shadow: 5px 5px 20px rgba(0, 0, 0, 0.5); /*表盘阴影*/ background: #F5DEB3; border: 10px solid #FFFF00; } /*画刻度的面板*/ .box { width: 100%; height: 100%; position: absolute; top: 0; left: 0; } /*用来装刻度的div*/ .box div { width: 0px; height: 200px; position: absolute; left: 200px; /*旋转*/ transform: rotate(0deg); /*设置基点为右下角*/ transform-origin: bottom right; background: rgba(255, 0, 0, 0.5); } /*小刻度*/ .box div:after { content: ""; position: absolute; background: #484848; width: 2px; height: 10px; left: -1px; } /*大刻度*/ .box div.five:after { position: absolute; content: ""; width: 4px; height: 20px; left: -2px; top: 0; background: #484848; border-radius: 0 0 2px 2px; } /*秒针样式*/ .second { width: 1px; height: 200px; background: red; position: absolute; left: 200px; /*距离表盘宽度一半*/ margin-top: 30px; z-index: 10; transform: rotate(0deg); transform-origin: center 170px; /*定位旋转位置*/ } /*圆心样式*/ .second:after { content: ""; position: absolute; width: 20px; height: 20px; background: red; border-radius: 50%; bottom: 20px; left: -10px; } /*分针样式*/ .minute { width: 2px; height: 140px; background: #8b8b8d; position: absolute; left: 199px; margin-top: 60px; z-index: 9; transform-origin: center bottom; transform: rotate(12deg); } /*时针样式*/ .hour { width: 6px; height: 100px; background: #333; position: absolute; left: 197px; margin-top: 100px; z-index: 8; border-radius: 3px; transform: rotate(2deg); transform-origin: center bottom; } </style> </head> <body> <div class="clock"> <div class="box"></div> <div class="second"></div> <div class="minute"></div> <div class="hour"></div> </div> <script> var box = document.getElementsByClassName("box")[0]; var ssObj = document.getElementsByClassName("second")[0]; var mmObj = document.getElementsByClassName("minute")[0]; var hhObj = document.getElementsByClassName("hour")[0]; /*获取当前时间*/ var date = new Date(); var hh = date.getHours(); var mm = date.getMinutes(); var ss = date.getSeconds(); /*计算页面指针加载时的角度*/ drawSS(); // 定义初始刻度的度数 var Deg = 0; /*画刻度*/ for (var i = 0; i < 60; i++) { var div1 = document.createElement("div"); //创建一个div //当为5时 if (i % 5 == 0) { //大刻度 div1.className = "five"; } div1.style.transform = "rotate(" + Deg + "deg)"; box.appendChild(div1); Deg += 6;// 每两个刻度之间是6度 } /*指针转动的函数*/ function drawSS() { // 秒针的度数 ssDeg = 360 * ss / 60; // 分针的度数 mmDeg = 360 * mm / 60 + (6 * ss / 60); // 时针的度数 hhDeg = 360 * (hh % 12) / 12 + (30 * mm / 60); // 旋转 hhObj.style.transform = "rotate(" + hhDeg + "deg)"; mmObj.style.transform = "rotate(" + mmDeg + "deg)"; ssObj.style.transform = "rotate(" + ssDeg + "deg)"; ss += 1; // 每秒钟调用一次 setTimeout(function() { drawSS(); }, 1000); } </script> </body> </html>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
华山资源网 Design By www.eoogi.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
华山资源网 Design By www.eoogi.com
暂无评论...
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
2024年11月14日
2024年11月14日
- 邱锋泽.2024-COlOR.Free【发现梦想】【FLAC分轨】
- 群星 《10年朋友Vol.8》滚石台湾版[WAV+CUE][1.G]
- 群星《2024好听新歌31》十倍音质 U盘音乐 [WAV分轨][1.1G]
- 群星《全天后》华纳[WAV+CUE][1.1G]
- 许乐《声愿HQCD》[正版原抓WAV+CUE]
- 黄凯芹《给你留念》头版限量编号MQA-UHQCD2024[低速原抓WAV+CUE]
- 黑鸭子2008-今生最爱[首版][WAV+CUE]
- 彭海桐.2000-好好想想你【SONY】【WAV+CUE】
- 群星.1995-亚洲电视剧集主题曲大全·乐作剧2CD【滚石】【WAV+CUE】
- 林强.1992-春风少年兄【魔岩】【WAV+CUE】
- 世界顶级汽车音响试音王《金色的草原》24K金碟[低速原抓WAV+CUE][1G]
- 周深 /Faouzia《解密 电影原声带》[320K/MP3][39.32MB]
- 周深 /Faouzia《解密 电影原声带》[FLAC/分轨][199.46MB]
- 英雄联盟s14亚军队伍是哪支 英雄联盟s14亚军队伍介绍
- 英雄联盟s14夺冠队伍是哪支 英雄联盟s14夺冠队SKT T1队伍介绍