js+css3实现简单时钟特效


Posted in Javascript onSeptember 13, 2020

本文实例为大家分享了js+css3实现简单时钟的具体代码,供大家参考,具体内容如下

1.实现了时钟的特效,可以转动,时间准确,画面美观大气;
2.用到了css3的transform: rotate,transform-origin:,伪元素,border-radius,定位,z-index等等

效果如图:

js+css3实现简单时钟特效

代码如下:

<!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>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
使用正则替换变量
May 05 Javascript
jquery.lazyload  实现图片延迟加载jquery插件
Feb 06 Javascript
JavaScript 面向对象的 私有成员和公开成员
May 13 Javascript
JavaScript中的一些定位属性[图解]
Jul 14 Javascript
HTML中的setCapture和releaseCapture使用介绍
Mar 21 Javascript
JS打印gridview实现原理及代码
Feb 05 Javascript
Javascript简写条件语句(推荐)
Jun 12 Javascript
漂亮! js实现颜色渐变效果
Aug 12 Javascript
谈谈对JavaScript原生拖放的深入理解
Sep 20 Javascript
bootstrap日期插件daterangepicker使用详解
Oct 19 Javascript
20多个小事例带你重温ES10新特性(小结)
Sep 29 Javascript
JS实现打字游戏
Dec 17 Javascript
jquery实现简易验证插件封装
Sep 13 #jQuery
利用H5api实现时钟的绘制(javascript)
Sep 13 #Javascript
浅谈javascript事件环微任务和宏任务队列原理
Sep 12 #Javascript
返回上一个url并刷新界面的js代码
Sep 12 #Javascript
Vue和React有哪些区别
Sep 12 #Javascript
浅谈vue项目利用Hbuilder打包成APP流程,以及遇到的坑
Sep 12 #Javascript
解决vue项目 build之后资源文件找不到的问题
Sep 12 #Javascript
You might like
php编程实现获取excel文档内容的代码实例
2011/06/28 PHP
ThinkPHP简单使用memcache缓存的方法
2016/11/15 PHP
PHP实现图片批量打包下载功能
2017/03/01 PHP
PHP微信开发之微信录音临时转永久存储
2018/01/26 PHP
PHP判断是否是微信打开,浏览器打开的方法
2018/03/14 PHP
采用CSS和JS,刚好我最近有个站点要用到下拉菜单!
2006/06/26 Javascript
Prototype使用指南之hash.js
2007/01/10 Javascript
js+FSO遍历文件夹下文件并显示
2007/03/07 Javascript
js 单击式的下拉菜单效果实例
2013/08/13 Javascript
js跨域请求的5中解决方式
2015/07/02 Javascript
js中判断变量类型函数typeof的用法总结
2016/08/09 Javascript
简单实现jQuery手风琴效果
2017/08/18 jQuery
微信页面弹出键盘后iframe内容变空白的解决方案
2017/09/20 Javascript
ES6 javascript中class类的get与set用法实例分析
2017/10/30 Javascript
微信小程序利用canvas 绘制幸运大转盘功能
2018/07/06 Javascript
4个顶级JavaScript高级文本编辑器
2018/10/10 Javascript
微信小程序module.exports模块化操作实例浅析
2018/12/20 Javascript
JavaScript 九种跨域方式实现原理
2019/02/11 Javascript
详解JavaScript 的变量
2019/03/08 Javascript
Vue数据绑定简析小结
2019/05/07 Javascript
使用p5.js临摹动态图片
2019/11/04 Javascript
探索浏览器页面关闭window.close()的使用详解
2020/08/21 Javascript
NodeJS开发人员常见五个错误理解
2020/10/14 NodeJs
使用Python的web.py框架实现类似Django的ORM查询的教程
2015/05/02 Python
详解C++编程中一元运算符的重载
2016/01/19 Python
10行Python代码计算汽车数量的实现方法
2019/10/23 Python
Python 字符串池化的前提
2020/07/03 Python
HTML实现代码雨源码及效果示例
2020/02/25 HTML / CSS
美国家居装饰购物网站:Amanda Lindroth
2020/03/25 全球购物
毕业生的自我评价分享
2013/12/18 职场文书
党员民主评议总结
2014/10/20 职场文书
党的群众路线教育实践活动个人对照检查材料(企业)
2014/11/05 职场文书
房地产置业顾问岗位职责
2015/04/11 职场文书
2015年度企业工作总结
2015/05/21 职场文书
家长意见和建议怎么写
2015/06/04 职场文书
《钓鱼的启示》教学反思
2016/02/18 职场文书