原生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 相关文章推荐
js 键盘记录实现(兼容FireFox和IE)
Feb 07 Javascript
新鲜出炉的js tips提示效果
Apr 03 Javascript
window.navigate 与 window.location.href 的使用区别介绍
Sep 21 Javascript
JS仿百度搜索自动提示框匹配查询功能
Nov 21 Javascript
js showModalDialog弹出窗口实例详解
Jan 07 Javascript
文字垂直滚动之javascript代码
Jul 29 Javascript
详解javascript传统方法实现异步校验
Jan 22 Javascript
javascript实现label标签跳出循环操作
Mar 06 Javascript
简单的js表格操作
Sep 24 Javascript
vue引入swiper插件的使用实例
Jul 19 Javascript
JQuery+Bootstrap 自定义全屏Loading插件的示例demo
Jul 03 jQuery
js实现简单图片拖拽效果
Feb 22 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打造属于自己的MVC框架
2012/03/07 PHP
php操作mysql数据库的基本类代码
2014/02/25 PHP
Windows下的PHP安装文件线程安全和非线程安全的区别
2014/04/23 PHP
PHP5.3以上版本安装ZendOptimizer扩展
2015/03/27 PHP
PHP封装的HttpClient类用法实例
2015/06/17 PHP
php随机显示指定文件夹下图片的方法
2015/07/13 PHP
PHP开发的微信现金红包功能示例
2017/06/29 PHP
Laravel5.5 动态切换多语言的操作方式
2019/10/25 PHP
jQuery学习笔记 操作jQuery对象 CSS处理
2012/09/19 Javascript
不使用浏览器运行javascript代码的方法
2013/07/24 Javascript
jQuery图片切换插件jquery.cycle.js使用示例
2014/06/16 Javascript
浅谈javascript回调函数
2014/12/07 Javascript
使用jQuery实现input数值增量和减量的方法
2015/01/24 Javascript
再谈JavaScript线程
2015/07/10 Javascript
基于bootstrap3和jquery的分页插件
2015/07/31 Javascript
JavaScript检测并限制复选框选中个数的方法
2015/08/12 Javascript
js获取图片宽高的方法
2015/11/25 Javascript
分享我的jquery实现下拉菜单心的
2015/11/29 Javascript
如何利用Promises编写更优雅的JavaScript代码
2016/05/17 Javascript
jQuery实现日期联动效果实例
2016/07/26 Javascript
Java  Spring 事务回滚详解
2016/10/17 Javascript
JavaScript无阻塞加载和defer、async详解
2017/02/26 Javascript
jQuery自定义多选下拉框效果
2017/06/19 jQuery
vuex 使用文档小结篇
2018/01/11 Javascript
微信小程序收藏功能的实现代码
2018/06/12 Javascript
解决layer.open后laydate失效的问题
2019/09/06 Javascript
vue props 单项数据流实例分享
2020/02/16 Javascript
浅析Python中的多进程与多线程的使用
2015/04/07 Python
python 不同方式读取文件速度不同的实例
2018/11/09 Python
Windows下PyCharm配置Anaconda环境(超详细教程)
2020/07/31 Python
佳能德国网上商店:Canon德国
2017/03/18 全球购物
ellesse美国官方商店:意大利高级运动服品牌
2019/10/29 全球购物
11月红领巾广播稿
2014/01/17 职场文书
mybatis使用oracle进行添加数据的方法
2021/04/27 Oracle
室外天线与收音机天线杆接合方法
2022/04/05 无线电
MySQL详解进行JDBC编程与增删改查方法
2022/06/16 MySQL