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 相关文章推荐
javascript标签在页面中的位置探讨
Apr 11 Javascript
js渐变显示渐变消失示例代码
Aug 01 Javascript
sencha touch 模仿tabpanel导航栏TabBar的实例代码
Oct 24 Javascript
JavaScript结合AJAX_stream实现流式显示
Jan 08 Javascript
JS实现密码框根据焦点的获取与失去控制文字的消失与显示效果
Nov 26 Javascript
javascript实现简单加载随机色方块
Dec 25 Javascript
js实现可控制左右方向的无缝滚动效果
May 29 Javascript
详解Vue监听数据变化原理
Mar 08 Javascript
jQuery表单验证之密码确认
May 22 jQuery
javascript实现非常简单的小数取整功能示例
Jun 13 Javascript
深入理解Vue官方文档梳理之全局API
Nov 22 Javascript
基于axios 的responseType类型的设置方法
Oct 29 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来检测proxy
2006/10/09 PHP
php json_encode奇怪问题说明
2011/09/27 PHP
php判断上传的Excel文件中是否有图片及PHPExcel库认识
2013/01/11 PHP
php中将数组转成字符串并保存到数据库中的函数代码
2013/09/29 PHP
Laravel中服务提供者和门面模式的入门介绍
2017/11/06 PHP
JavaScript语言核心数据类型和变量使用介绍
2013/08/23 Javascript
点击表单提交时出现jQuery没有权限的解决方法
2014/07/23 Javascript
JavaScript函数的调用以及参数传递
2015/10/21 Javascript
详解AngularJS中自定义过滤器
2015/12/28 Javascript
jQuery移动端图片上传组件
2016/06/12 Javascript
jQuery对checkbox 复选框的全选全不选反选的操作
2016/08/09 Javascript
Node.js中文件操作模块File System的详细介绍
2017/01/05 Javascript
Javascript中类式继承和原型式继承的实现方法和区别之处
2017/04/25 Javascript
使用JavaScript实现表格编辑器(实例讲解)
2017/08/02 Javascript
JS实现基于Sketch.js模拟成群游动的蝌蚪运动动画效果【附demo源码下载】
2017/08/18 Javascript
详解vue中的computed的this指向问题
2018/12/05 Javascript
react+ant design实现Table的增、删、改的示例代码
2018/12/27 Javascript
20道JS原理题助你面试一臂之力(必看)
2019/07/22 Javascript
Webpack设置环境变量的一些误区详解
2019/12/19 Javascript
JS使用正则表达式实现常用的表单验证功能分析
2020/04/30 Javascript
vue-cli+webpack项目打包到服务器后,ttf字体找不到的解决操作
2020/08/28 Javascript
python抓取百度首页的方法
2015/05/19 Python
在Qt5和PyQt5中设置支持高分辨率屏幕自适应的方法
2019/06/18 Python
python生成大写32位uuid代码
2020/03/03 Python
基于Python爬取京东双十一商品价格曲线
2020/10/23 Python
HTML+CSS+JavaScript实现图片3D展览的示例代码
2020/10/12 HTML / CSS
Expedia瑞典官网:预订度假屋、酒店、汽车租赁、机票等
2021/01/23 全球购物
外贸英语毕业生自荐信
2013/11/14 职场文书
超市5.1促销活动
2014/01/15 职场文书
摄影专业毕业生求职信
2014/03/13 职场文书
人事任命书格式
2014/06/05 职场文书
《落花生》教学反思
2016/02/16 职场文书
《春酒》教学反思
2016/02/22 职场文书
java泛型通配符详解
2021/07/25 Java/Android
Python使用PyYAML库读写yaml文件的方法
2022/04/06 Python
Python matplotlib绘制条形统计图 处理多个实验多组观测值
2022/04/21 Python