浅谈时钟的生成(js手写简洁代码)


Posted in Javascript onAugust 20, 2016

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

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

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 来定指针转动点一定要定准

浅谈时钟的生成(js手写简洁代码)

 

浅谈时钟的生成(js手写简洁代码)

 

浅谈时钟的生成(js手写简洁代码)

 

 

浅谈时钟的生成(js手写简洁代码)

 

浅谈时钟的生成(js手写简洁代码)

 

浅谈时钟的生成(js手写简洁代码)

以上这篇浅谈时钟的生成(js手写简洁代码)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
学习ExtJS(二) Button常用方法
Oct 07 Javascript
js调用AJAX时Get和post的乱码解决方法
Jun 04 Javascript
Extjs4 类的定义和扩展实例
Jun 28 Javascript
Node.js和PHP根据ip获取地理位置的方法
Mar 14 Javascript
seaJs的模块定义和模块加载浅析
Jun 06 Javascript
SuperSlide标签切换、焦点图多种组合插件
Mar 14 Javascript
浅谈js原生拖放
Nov 21 Javascript
详解AngularJS ui-sref的简单使用
Apr 24 Javascript
JavaScript之RegExp_动力节点Java学院整理
Jun 29 Javascript
layer弹出层全屏及关闭方法
Aug 17 Javascript
JavaScript函数式编程(Functional Programming)声明式与命令式实例分析
May 21 Javascript
es6函数之箭头函数用法实例详解
Apr 25 Javascript
js 基础篇必看(点击事件轮播图的简单实现)
Aug 20 #Javascript
再谈Javascript中的异步以及如何异步
Aug 19 #Javascript
用原生js统计文本行数的简单示例
Aug 19 #Javascript
jQuery购物网页经典制作案例
Aug 19 #Javascript
手机Web APP如何实现分享多平台功能
Aug 19 #Javascript
浅谈Javascript中的12种DOM节点类型
Aug 19 #Javascript
js实现select选择框效果及美化
Aug 19 #Javascript
You might like
自动跳转中英文页面
2006/10/09 PHP
Mysql中limit的用法方法详解与注意事项
2008/04/19 PHP
PHP实现定时生成HTML网站首页实例代码
2008/11/20 PHP
PHP5各个版本的新功能和新特性总结
2014/03/16 PHP
Yii2使用小技巧之通过 Composer 添加 FontAwesome 字体资源
2014/06/22 PHP
PHP+jQuery+Ajax实现用户登录与退出
2015/04/27 PHP
PHP如何通过AJAX方式实现登录功能
2015/11/23 PHP
phpinfo() 中 Local Value(局部变量)Master Value(主变量) 的区别
2016/02/03 PHP
smarty的section嵌套循环用法示例
2016/05/28 PHP
lnmp安装多版本PHP共存的方法详解
2018/08/02 PHP
零基础php编程好学吗
2019/10/11 PHP
js 父窗口控制子窗口的行为-打开,关闭,重定位,回复
2010/04/20 Javascript
js、jquery图片动画、动态切换示例代码
2014/06/03 Javascript
jQuery替换textarea中换行的方法
2015/06/10 Javascript
超简单的Vue.js环境搭建教程
2017/03/17 Javascript
jQuery条件分页 代替离线查询(附代码)
2017/08/17 jQuery
JavaScript使用FileReader实现图片上传预览效果
2020/03/27 Javascript
JavaScript从原型到原型链深入理解
2019/06/03 Javascript
js微信分享接口调用详解
2019/07/23 Javascript
vue实现简易图片左右旋转,上一张,下一张组件案例
2020/07/31 Javascript
JavaScript 实现轮播图特效的示例
2020/11/05 Javascript
node.js通过Sequelize 连接MySQL的方法
2020/12/28 Javascript
[01:59][TI9趣味视频] 全明星赛奖励
2019/08/23 DOTA
Python实现二叉树结构与进行二叉树遍历的方法详解
2016/05/24 Python
基于python3实现socket文件传输和校验
2018/07/28 Python
Django JWT Token RestfulAPI用户认证详解
2019/01/23 Python
python开发实例之Python的Twisted框架中Deferred对象的详细用法与实例
2020/03/19 Python
python/golang实现循环链表的示例代码
2020/09/14 Python
美国滑雪板和装备购物网站:Skis.com
2018/12/20 全球购物
中文专业毕业生自荐书范文
2014/01/04 职场文书
班子四风对照检查材料
2014/08/21 职场文书
欢迎词怎么写
2015/01/23 职场文书
中小企业员工手册范本
2015/05/14 职场文书
Python 中数组和数字相乘时的注意事项说明
2021/05/10 Python
Java 在生活中的 10 大应用
2021/11/02 Java/Android
分析SQL窗口函数之取值窗口函数
2022/04/21 Oracle