浅谈时钟的生成(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各种复制代码收集
Sep 20 Javascript
javascript数字数组去重复项的实现代码
Dec 30 Javascript
阻止事件(取消浏览器对事件的默认行为并阻止其传播)
Nov 03 Javascript
javascript中数组中求最大值示例代码
Dec 18 Javascript
js确认删除对话框适用于a标签及submit
Jul 10 Javascript
js中函数调用的两种常用方法使用介绍
Jul 17 Javascript
js事件监听器用法实例详解
Jun 01 Javascript
js实现3D图片逐张轮播幻灯片特效代码分享
Sep 09 Javascript
jquery trigger实现联动的方法
Feb 29 Javascript
jQuery之动画效果大全
Nov 09 Javascript
微信小程序中的swiper组件详解
Apr 14 Javascript
详解从Vue-router到html5的pushState
Jul 21 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
冰滴咖啡制作步骤
2021/03/03 冲泡冲煮
安装APACHE
2007/01/15 PHP
PHP多例模式介绍
2013/06/24 PHP
php 邮件发送问题解决
2014/03/22 PHP
ThinkPHP CURD方法之order方法详解
2014/06/18 PHP
php判断GIF图片是否为动画的方法
2020/09/04 PHP
PHP 正则表达式小结
2015/02/12 PHP
PHP-X系列教程之内置函数的使用示例
2017/10/16 PHP
PHP排序二叉树基本功能实现方法示例
2018/05/26 PHP
jQuery select控制插件
2009/08/17 Javascript
jQuery的实现原理的模拟代码 -3 事件处理
2010/08/03 Javascript
Javascript学习笔记 delete运算符
2011/09/13 Javascript
关于删除时的提示处理(确定删除吗)
2013/11/03 Javascript
手机平板等移动端适配跳转URL的js代码
2014/01/25 Javascript
JavaScript实现复制文章自动添加版权
2016/08/02 Javascript
jquery判断类型是不是number类型的实例代码
2016/10/07 Javascript
微信小程序 动态绑定数据及动态事件处理
2017/03/14 Javascript
基于jstree使用AJAX请求获取数据形成树
2017/08/29 Javascript
判断滚动条滑到底部触发事件(实例讲解)
2017/11/15 Javascript
深入浅析JSONAPI在PHP中的应用
2017/12/24 Javascript
Vue中computed与methods的区别详解
2018/03/24 Javascript
vue2.0+ 从插件开发到npm发布的示例代码
2018/04/28 Javascript
改变layer confirm弹窗按钮的颜色方法
2019/09/12 Javascript
Nuxt.js 静态资源和打包的操作
2020/11/06 Javascript
django 常用orm操作详解
2017/09/13 Python
Python3操作SQL Server数据库(实例讲解)
2017/10/21 Python
python模块之paramiko实例代码
2018/01/31 Python
python使用多线程编写tcp客户端程序
2019/09/02 Python
Pycharm生成可执行文件.exe的实现方法
2020/06/02 Python
Html5新标签解释及用法
2012/02/17 HTML / CSS
基于html5绘制圆形多角图案
2016/04/21 HTML / CSS
加拿大高尔夫超市:Golf Town
2018/01/12 全球购物
立项申请报告范本
2015/05/15 职场文书
培训计划通知
2015/07/15 职场文书
五一放假通知怎么写
2015/08/18 职场文书
创作书写之导游词实用技巧分享(干货)
2019/12/20 职场文书