浅谈时钟的生成(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 相关文章推荐
JavaScript 利用Cookie记录用户登录信息
Dec 08 Javascript
JQuery.ajax传递中文参数的解决方法 推荐
Mar 28 Javascript
jQuery页面图片伴随滚动条逐渐显示的小例子
Mar 21 Javascript
使用原生js写的一个简单slider
Apr 29 Javascript
Javascript基于AJAX回调函数传递参数实例分析
Dec 15 Javascript
Svg.js实例教程及使用手册详解(一)
May 16 Javascript
Bootstrap Table表格一直加载(load)不了数据的快速解决方法
Sep 17 Javascript
解析jQueryEasyUI的使用
Nov 22 Javascript
node(koa2) web应用模块介绍详解
Mar 29 Javascript
微信小程序的mpvue框架快速上手指南
May 15 Javascript
v-slot和slot、slot-scope之间相互替换实例
Sep 04 Javascript
vue 如何从单页应用改造成多页应用
Oct 23 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
松下Panasonic RF-B65电路分析
2021/03/02 无线电
php运行时动态创建函数的方法
2015/03/16 PHP
PHP SPL标准库之数据结构栈(SplStack)介绍
2015/05/12 PHP
Zend Framework教程之连接数据库并执行增删查的方法(附demo源码下载)
2016/03/21 PHP
JQuery自定义事件的应用 JQuery最佳实践
2010/08/01 Javascript
jquery交替变换颜色的三种方法 实例代码
2013/11/19 Javascript
jquery实现倒计时代码分享
2014/06/13 Javascript
JavaScript简介
2015/02/15 Javascript
js实现浏览本地文件并显示扩展名的方法
2015/08/17 Javascript
使用jquery实现鼠标滑过弹出更多相关信息层附源码下载
2015/11/23 Javascript
jQuery简单操作cookie的插件实例
2016/01/13 Javascript
基于Vue制作组织架构树组件
2017/12/06 Javascript
微信小程序WebSocket实现聊天对话功能
2018/07/06 Javascript
Vue递归组件+Vuex开发树形组件Tree--递归组件的简单实现
2019/04/01 Javascript
webpack4手动搭建Vue开发环境实现todoList项目的方法
2019/05/16 Javascript
JavaScript简易计算器制作
2020/01/17 Javascript
JavaScript实现网页跨年倒计时
2020/12/02 Javascript
Python创建系统目录的方法
2015/03/11 Python
python安装oracle扩展及数据库连接方法
2017/02/21 Python
Python实现变量数值交换及判断数组是否含有某个元素的方法
2017/09/18 Python
Python玩转Excel的读写改实例
2019/02/22 Python
Python Django框架单元测试之文件上传测试示例
2019/05/17 Python
Python3爬虫中关于Ajax分析方法的总结
2020/07/10 Python
CSS3 box-shadow属性实例详解
2020/06/19 HTML / CSS
Sneaker Studio波兰:购买运动鞋
2018/04/28 全球购物
世界上最值得信赖的多日游在线市场:TourRadar
2018/07/20 全球购物
求职简历推荐信范文
2013/12/02 职场文书
前台文员我鉴定
2014/01/12 职场文书
索桥的故事教学反思
2014/02/06 职场文书
办公室综合文员岗位职责范本
2014/02/13 职场文书
学校节能减排倡议书
2014/05/16 职场文书
写给医生的感谢信
2015/01/22 职场文书
瞿秋白纪念馆观后感
2015/06/10 职场文书
毕业典礼致辞
2015/07/29 职场文书
就业指导讲座心得体会
2016/01/15 职场文书
2019年圣诞节祝福语集锦
2019/12/25 职场文书