在生成时钟的过程中自己想到布置表盘的写法由这么几种:

当然利用那种模式都可以实现,所以我们要用一个最好理解,代码有相对简便的方法实现

1、利用三角函数

  用js在三角函数布置表盘的过程中有遇见到这种情况:是在表盘的刻度处,利用三角函数计算具体的值时不能得到整数,需要向上或者向下取整,这样无形中就会存在些许偏差,而且这样的偏差难利用样式来调整到位,即使最终效果都可以实现,但是细微处的缝隙和角度的偏差都会影响整体的视觉体验,作为一名程序开发人员,这样的视觉体验很难让别人认可,放弃。

2、利用遮罩层

  js利用遮罩层,主要还是在表盘的刻度处,表盘的刻度有长和短,每5个刻度都有一根较长的刻度,这样我们利用遮罩层遮住的刻度的长短都是一致的,很难继续调整其余的刻度所以也放弃。

3、利用定位以及(父子级关系)(推荐)

  利用定位以及父子级关系的方法我觉得最好理解和上手,在这里为大家分享一下。下面是实现代码:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
    <style media="screen">
      * {
        margin: 0;
        padding: 0;
      }
      #clock {
        width: 600px;
        height: 600px;
        border: 4px solid lightgray;
        margin: auto;
        position: relative;
        border-radius: 50%;
      }
      #scale {
        width: 20px;
        height: 100%;
        position: absolute;
        left: 50%;
        margin-left: -10px;
        /*background: green;*/
      }
      #point {
        width: 4px;
        height: 10px;
        background: lightgray;
        margin: auto;
      }
      #number {
        width: 20px;
        height: 20px;
        margin-top: 5px;
        /*background: red;*/
        font-size: 20px;
        text-align: center;
        line-height: 20px;
      }
      #hour {
        width: 12px;
        height: 180px;
        background: red;
        border-radius: 6px;
        transform-origin: 50% 150px;
        position: absolute;
        top: 150px;
        left: 50%;
        margin-left: -6px;
      }
      #minute {
        width: 8px;
        height: 250px;
        background: orange;
        position: absolute;
        border-radius: 4px;
        transform-origin:  50% 200px;
        top: 100px;
        left: 50%;
        margin-left: -4px;
      }
      #second {
        width: 4px;
        height: 360px;
        background: red;
        border-radius: 2px;
        position: absolute;
        top: 0;
        left: 50%;
        margin-left: -2px;
        transform-origin: 50% 300px;
        z-index: 100;
      }
    </style>
  </head>
  <body>
    <div id="clock">
      <div id="hour">

</div>
      <div id="minute">

</div>
      <div id="second">

</div>
    </div>
  </body>
  <script type="text/javascript">
    var clock = document.getElementById('clock');
    var hour = document.getElementById('hour');
    var minute = document.getElementById('minute');
    var second = document.getElementById('second');

function surface() {
      var currentDate = new Date();
      var hours = currentDate.getHours();
      var minutes = currentDate.getMinutes();
      var seconds = currentDate.getSeconds();

seconds = hours * 3600 + minutes * 60 + seconds;

hour.style.transform = 'rotate('+seconds / 120+'deg)';
      minute.style.transform = 'rotate('+seconds * 0.1+'deg)';
      second.style.transform = 'rotate('+seconds * 6+'deg)';

}
    setInterval('surface()', 1000);

for (var i = 1; i < 61; i++) {
      var scale = document.createElement('div');
      scale.id = 'scale';
      scale.style.transform = 'rotate('+i * 6+'deg)';
      clock.appendChild(scale);

var point = document.createElement('div');
      point.id = 'point';
      scale.appendChild(point);

var number = document.createElement('div');
      number.id = 'number';
      number.style.transform = 'rotate(-'+i * 6+'deg)'
      if (i % 5 == 0) {
        number.innerHTML = i / 5;
        point.style.height = '15px';
      }
      scale.appendChild(number);
    }
  </script>
</html>

校正中需要注意:

1、以下是分步实现的效果图,最后做到细节处紧密贴合,不用其他的方法在对她进行微调,当样式布局全部完成之后就可以获取当前的时间加以校正,在校正的过程中有这样一个问题,希望大家能注意: 时针的转动角度不能以小时为单位来计算,例如:9:58 这时的时针指的位置是9,当10 :00 时,时针以下跳转到10的位置,所以时针的角度要以分钟或者秒来计算,分针的角度跳转要以分钟或者秒来计算,秒针就是每秒跳转6度。

2、还有一点要注意,三个指针的转动圆心问题,利用transform-origin 来定指针转动点一定要定准

最新文章

  1. (转)nginx优化 实现10万并发访问量
  2. 6. 终端工具Xmanager使用技巧
  3. 用C++实现的SDK跨平台心得体会
  4. VS2005 / windows sdk7.1配置
  5. Map的数据结构
  6. AMD规范基本结构
  7. Spark RDD Union
  8. 体验下Xcode5与ios7
  9. 反射技术在Android中的应用
  10. IIC协议简介(笔记图片)
  11. markdown语法(看这张图就够了)
  12. linux 常见命令及说明杂记
  13. JsRender 前端渲染模板基础学习
  14. Java编程的逻辑 (91) - Lambda表达式
  15. yum update软件包冲突
  16. 微软Power BI 每月功能更新系列——7月Power BI 新功能学习
  17. SDN竞赛思考总结
  18. wp中的动画
  19. SSH电力项目三 - Dao层、service层查询实现(HQL)
  20. 【入门向】使用 MetaHook Plus 绘制 HUD

热门文章

  1. AngularJS 系列 学习笔记 目录篇
  2. 免费SSL证书 之Let’s Encrypt申请与部署(Windows Nginx)
  3. mono3.2和monodevelop4.0在ubuntu12.04上两天的苦战
  4. BCL中String.Join的实现
  5. 跟我一起ggplot2(1)
  6. IOC框架
  7. zookeeper集群搭建
  8. ASP.NET Core管道深度剖析[共4篇]
  9. DataTable与DTO对象的简易转换类
  10. iFrame 功能详解