原生JS实现的简单小钟表功能示例


Posted in Javascript onAugust 30, 2018

本文实例讲述了原生JS实现的简单小钟表功能。分享给大家供大家参考,具体如下:

先来看看运行效果:

原生JS实现的简单小钟表功能示例

完整代码:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>3water.com 钟表</title>
    <style type="text/css">
      body {
       background-color:#00A2D4;
      }
      .clock {
        width: 200px;
        height: 200px;
        background: -webkit-radial-gradient(#3b3b3b, #000);
        background: radial-gradient(#2E3F50, #0E1B29);
        box-shadow: inset 0px 0px 30px #131313, 0px 2px 18px rgba(0,0,0,0.5);
        border: 6px solid #172839;
        border-radius: 106px;
        margin: auto;
        position: absolute;
        top: 0; bottom: 0; left: 0; right: 0;
      }
      .hour-hand {
        width: 4px;
        height: 55px;
        background: #fff;
        box-shadow: 0px 0px 7px #000;
        position: absolute;
        top: 45px;
        left: 98px;
      }
      .minute-hand {
        width: 4px;
        height: 80px;
        background: #fff;
        box-shadow: 0px 0px 4px #000;
        position: absolute;
        top: 20px;
        left: 98px;
      }
      .second-hand {
        width: 2px;
        height: 80px;
        background: #bbb;
        box-shadow: 0px 0px 7px #000;
        position: absolute;
        top: 20px;
        left: 99px;
      }
      .pin {
        width: 10px;
        height: 10px;
        background: #222;
        border-radius: 10px;
        margin: auto;
        position: absolute;
        top: 0; bottom: 0; left: 0; right: 0;
      }
      .hour-hand,
      .minute-hand,
      .second-hand {
        -webkit-transform-origin: 50% 100%;
        -moz-transform-origin: 50% 100%;
        -o-transform-origin: 50% 100%;
        -ms-transform-origin: 50% 100%;
        transform-origin: 50% 100%;
      }
      .circle{
        width:20px;
        height:20px;
        line-height:20px;
        text-align:center;
        color:#fff;
        position: absolute;
      }
    </style>
  </head>
  <body>
    <div class="clock">
      <div class="minute-hand"></div>
      <div class="hour-hand"></div>
      <div class="second-hand"></div>
      <div class="pin"></div>
      <div class="circle">6</div>
      <div class="circle">5</div>
      <div class="circle">4</div>
      <div class="circle">3</div>
      <div class="circle">2</div>
      <div class="circle">1</div>
      <div class="circle">12</div>
      <div class="circle">11</div>
      <div class="circle">10</div>
      <div class="circle">9</div>
      <div class="circle">8</div>
      <div class="circle">7</div>
    </div>
    <div class="time"></div>
    <script type="text/javascript">
      window.onload=function(){
        setInterval(function(){
          var dt = new Date();
          var sec_deg = dt.getSeconds() * (360/60);
          var min_deg = dt.getMinutes() * (360/60);
          var hr_deg = dt.getHours() * (360/12) + dt.getMinutes() * (360/60/12);
          document.querySelector(".clock .second-hand").style.cssText='-webkit-transform:rotate(' + sec_deg + 'deg)','-moz-transform:rotate(' + sec_deg + 'deg)', '-o-transform:rotate(' + sec_deg + 'deg)', '-ms-transform:rotate(' + sec_deg + 'deg)', 'transform:rotate(' + sec_deg + 'deg)';
          document.querySelector('.clock .minute-hand').style.cssText='-webkit-transform:rotate(' + min_deg + 'deg)', '-moz-transform:rotate(' + min_deg + 'deg)', '-o-transform:rotate(' + min_deg + 'deg)', '-ms-transform:rotate(' + min_deg + 'deg)', 'transform:rotate(' + min_deg + 'deg)';
          document.querySelector('.clock .hour-hand').style.cssText='-webkit-transform:rotate(' + hr_deg + 'deg)', '-moz-transform:rotate(' + hr_deg + 'deg)', '-o-transform:rotate(' + hr_deg + 'deg)', '-ms-transform:rotate(' + hr_deg + 'deg)', 'transform:rotate(' + hr_deg + 'deg)';
         }, 1000);
        var dx=90,
          dy=90,
          s=87,//半径
          x=Math.sin(0),
          y=Math.cos(0),
          dig=2*Math.PI/12;
        var circle=document.querySelectorAll(".circle");
        for(var i=0;i<12;i++){
          var x=Math.sin(i*dig);
          var y=Math.cos(i*dig);
          var topValue=Number(dy+y*s),
            leftValue=Number(dx+x*s);
          circle[i].style.top=topValue+"px";
          circle[i].style.left=leftValue+"px";
        }
      }
    </script>
  </body>
</html>

感兴趣的朋友可使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试一下运行效果。

Javascript 相关文章推荐
实用javaScript技术-屏蔽类
Aug 15 Javascript
淘宝网提供的国内NPM镜像简介和使用方法
Apr 17 Javascript
AngularJS 指令详细介绍
Jul 27 Javascript
socket.io学习教程之深入学习篇(三)
Apr 29 Javascript
vue实现长图垂直居上 vue实现短图垂直居中
Oct 18 Javascript
浅谈Angular 中何时取消订阅
Nov 22 Javascript
JavaScript异步加载问题总结
Feb 17 Javascript
React Native开发封装Toast与加载Loading组件示例
Sep 08 Javascript
webpack-url-loader 解决项目中图片打包路径问题
Feb 15 Javascript
微信小程序封装的HTTP请求示例【附升级版】
May 11 Javascript
vue2配置scss的方法步骤
Jun 06 Javascript
Vue3.0的优化总结
Oct 16 Javascript
使用Node搭建reactSSR服务端渲染架构
Aug 30 #Javascript
webpack4+Vue搭建自己的Vue-cli项目过程分享
Aug 29 #Javascript
JS实现的input选择图片本地预览功能示例
Aug 29 #Javascript
简述vue状态管理模式之vuex
Aug 29 #Javascript
jQuery实现的简单手风琴效果示例
Aug 29 #jQuery
angularjs实现对表单输入改变的监控(ng-change和watch两种方式)
Aug 29 #Javascript
jQuery实现的淡入淡出图片轮播效果示例
Aug 29 #jQuery
You might like
php笔记之:有规律大文件的读取与写入的分析
2013/04/26 PHP
php+ajax制作无刷新留言板
2015/10/27 PHP
玩转方法:call和apply
2014/05/08 Javascript
JavaScript实现动画打开半透明提示层的方法
2015/04/21 Javascript
如何用javascript计算文本框还能输入多少个字符
2015/07/29 Javascript
JavaScript中函数声明与函数表达式的区别详解
2016/08/18 Javascript
AngularJS用户选择器指令实例分析
2016/11/04 Javascript
BootStrap Validator 版本差异问题导致的submitHandler失效问题的解决方法
2016/12/01 Javascript
js实现放大镜特效
2017/05/18 Javascript
Mac系统下Webstorm快捷键整理大全
2017/05/28 Javascript
关于element的表单组件整理笔记
2021/02/05 Javascript
[03:02]辉夜杯主赛事第二日 每日之星
2015/12/27 DOTA
[42:24]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第一场 11.01
2020/11/02 DOTA
Python 文件重命名工具代码
2009/07/26 Python
使用Python来开发Markdown脚本扩展的实例分享
2016/03/04 Python
Google开源的Python格式化工具YAPF的安装和使用教程
2016/05/31 Python
python 查找字符串是否存在实例详解
2017/01/20 Python
Python基于hashlib模块的文件MD5一致性加密验证示例
2018/02/10 Python
CSS3提交意见输入框样式代码
2014/10/30 HTML / CSS
使用纯HTML5编写一款网页上的时钟的代码分享
2015/11/16 HTML / CSS
巴西在线鞋店:Shoestock
2017/10/28 全球购物
The Outnet亚太地区:折扣设计师时装店
2019/12/05 全球购物
英国领先的高级美容和在线皮肤诊所:Face the Future
2020/06/17 全球购物
为什么会有内存对齐
2016/10/10 面试题
18岁生日感言
2014/01/12 职场文书
空气环保标语
2014/06/12 职场文书
应聘护士求职信
2014/07/21 职场文书
房产公证书
2015/01/23 职场文书
个人自荐书范文
2015/03/09 职场文书
家长意见和建议怎么写
2015/06/04 职场文书
有关水浒传的读书笔记
2015/06/25 职场文书
离婚协议书范本(2016最新版)
2016/03/18 职场文书
Oracle 触发器trigger使用案例
2022/02/24 Oracle
Python用tkinter实现自定义记事本的方法详解
2022/03/31 Python
Python四款GUI图形界面库介绍
2022/06/05 Python
Android实现获取短信验证码并自动填充
2023/05/21 Java/Android