浅谈时钟的生成(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 相关文章推荐
JQuery从头学起第二讲
Jul 04 Javascript
判断JS对象是否拥有某种属性的两种方式
Dec 02 Javascript
javascript实现的一个随机点名功能
Aug 26 Javascript
去除字符串左右两边的空格(实现代码)
May 12 Javascript
JavaScript判断数组重复内容的两种方法(推荐)
Jun 06 Javascript
原生js实现键盘控制div移动且解决停顿问题
Dec 05 Javascript
让你彻底掌握es6 Promise的八段代码
Jul 26 Javascript
Vue调试神器vue-devtools安装方法
Dec 12 Javascript
Vuex 进阶之模块化组织详解
Jan 12 Javascript
vue-cli项目中使用echarts图表实例
Oct 22 Javascript
vue动态路由:路由参数改变,视图不更新问题的解决
Nov 05 Javascript
Vue router安装及使用方法解析
Dec 02 Vue.js
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
WML,Apache,和 PHP 的介绍
2006/10/09 PHP
浅谈PHP中的数据传输CURL
2016/09/06 PHP
PHP钩子与简单分发方式实例分析
2017/09/04 PHP
php 处理png图片白色背景色改为透明色的实例代码
2018/12/10 PHP
jquery创建div 实现代码
2009/04/27 Javascript
JQuery一种取同级值的方式(比如你在GridView中)
2012/03/15 Javascript
$.extend 的一个小问题
2015/06/18 Javascript
基于jquery实现select选择框内容左右移动添加删除代码分享
2015/08/25 Javascript
解决JS组件bootstrap table分页实现过程中遇到的问题
2016/04/21 Javascript
jquery通过name属性取值的简单实现方法
2016/06/20 Javascript
JS实现控制文本框的内容
2016/07/10 Javascript
js中动态创建json,动态为json添加属性、属性值的实例
2016/12/02 Javascript
footer定位页面底部(代码分享)
2017/03/07 Javascript
JavaScript正则表达式校验与递归函数实际应用实例解析
2017/08/04 Javascript
vue cli webpack中使用sass的方法
2018/02/24 Javascript
Node.js静态服务器的实现方法
2018/02/28 Javascript
解决Vue 给mapState中定义的属性赋值报错的问题
2020/06/22 Javascript
[03:33]TI9战队采访 - Infamous
2019/08/20 DOTA
Python中的字典遍历备忘
2015/01/17 Python
基于Python如何使用AIML搭建聊天机器人
2016/01/27 Python
python实现判断一个字符串是否是合法IP地址的示例
2018/06/04 Python
python用线性回归预测股票价格的实现代码
2019/09/04 Python
Laravel框架表单验证格式化输出的方法
2019/09/25 Python
python连接mongodb集群方法详解
2020/02/13 Python
python标准库OS模块详解
2020/03/10 Python
德国网上药房:Apotal
2017/04/04 全球购物
项目资料员岗位职责
2013/12/10 职场文书
自我评价范文
2013/12/22 职场文书
大学新闻系应届生求职信
2014/06/02 职场文书
中学生秋季运动会广播稿
2014/09/21 职场文书
2014购房个人委托书范本
2014/10/12 职场文书
幼儿园教师师德承诺书
2015/04/28 职场文书
小学教代会开幕词
2016/03/04 职场文书
SQL Server连接查询的实用教程
2021/04/07 SQL Server
Nginx+Tomcat负载均衡集群的实现示例
2021/10/24 Servers
Selenium浏览器自动化如何上传文件
2022/04/06 Python