当前位置: 首页 > news >正文

js实现的时钟

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

今天这个时钟效果图:

一程序员用javascript做了这个时钟特效,面试秒过

项目分析

1、首先时钟嘛,肯定要获取本地客户端的时间;

2、时钟有 3 个指针,我们可以通过添加动画的方式让它们围绕中心点转动;

3、通过获取到的 hour、minute 和 second 值分别计算 时针、分针和秒针的角度值;

HTML&CSS

布局

一程序员用javascript做了这个时钟特效,面试秒过

1、.box是为了布局的方便;

2、 然后每个指针都需要一个 *-container容器 。

添加 CSS 样式

把背景加载进来,然后放在页面中合适的位置上。

一程序员用javascript做了这个时钟特效,面试秒过

一程序员用javascript做了这个时钟特效,面试秒过

1、 width: 35rem; height: 38rem;这个比例比较顺眼吧;

2、 .box使用 Flex 布局方式,并且使其中的 .clock水中、垂直方向都居中。看过第一天教程应该都明白 Flex 布局的。

添加中心轴

使用 CSS3 中的 伪元素 为时钟添加实心小圆点,指针都围着这个点转。

一程序员用javascript做了这个时钟特效,面试秒过

一程序员用javascript做了这个时钟特效,面试秒过

1、 这句 content: '';是必须的,不然这个伪元素不会显示,即使指定了宽度和高度。

2、 由于相对定位是从元素的左上角开始计算的,所以 top: 50%; left: 50%;不能使这个小圆点在 Clock 的中心,使用 transform: translate(-50%,-50%);向左上方移动自身宽度或高度的 50%

3、 z-index: 10; 是为了使这个小圆点在视图的最上层,遮挡住指针交叉的地方

指针容器
一程序员用javascript做了这个时钟特效,面试秒过

1、容器被放置在 Clock 的上方,但是并没有样式,接下来就可以创建指针了!

添加指针
一程序员用javascript做了这个时钟特效,面试秒过
一程序员用javascript做了这个时钟特效,面试秒过

1、分别添加时针、分针和秒针。

2、 使用 %这种单位可以更好地适应不同的屏幕。

3、transform-origin: 50% 90%;规定指针旋转的位置为:X 方向的中心线 和 Y 方向的 90% 处这条线的交叉点。(具体看图吧)

一程序员用javascript做了这个时钟特效,面试秒过

4、 这里在定位的时候把自身的宽度计算在内了,所以就不必在往左上角移动了。

动画

目前为止,这个 Clock 还是没有功能的,我们来让它动起来。

定义动画规则
一程序员用javascript做了这个时钟特效,面试秒过

1、这里用 @keyframes 规则定义了一个动画,这个动画的名称是 ratate ,应用这个动画的元素会沿着某个 Z 轴(也就是上面规定好的哪个交叉点)旋转 360 度。

定时功能

规定每个指针旋转 360 度需要多长时间。

一程序员用javascript做了这个时钟特效,面试秒过

一程序员用javascript做了这个时钟特效,面试秒过

一程序员用javascript做了这个时钟特效,面试秒过

更像真实的 Clock

现实中的 Clock 大部分是秒针和分针都是会跳动的,并且伴随着滴答声,我们来尝试一下。

一程序员用javascript做了这个时钟特效,面试秒过

一程序员用javascript做了这个时钟特效,面试秒过

1、只需要将 分针 和 秒针的旋转方式调整为 steps()即可。

但是这样的 Clock 每次刷新都是从 0 开始的,并不是我们需要的,怎么做一个显示真实时间的呢??

正确的时间

我们首先要获取到当前的时间,然后计算每个指针应该旋转的角度即可。

获取每个指针

一程序员用javascript做了这个时钟特效,面试秒过

一程序员用javascript做了这个时钟特效,面试秒过

计算每个指针应旋转的角度

在 CSS3 中角度单位一共有四种:

deg(度,一个圆 360 度)、

grad(梯度,一个圆共400梯度)、

turn (转、圈,一个圆共1圈)、

rad(弧度,一个圆共2π弧度)

它们的对应关系为:

90deg = 100grad = 0.25turn ≈ 1.570796326794897rad

很显然,我们这里要用到的单位是 deg
一程序员用javascript做了这个时钟特效,面试秒过

1、+90是因为角度的起始位置为水平的 X 轴,为了和 Clock 指针起始位置(Y 轴)做统一;

2、秒针的计算最简单,(second / 60) * 360 + 90;

3、分针要考虑秒针的影响,如过了30秒,相当于半分钟。公式为: 当前分钟数 + 秒数在分钟的映射
;即:(( minutes/ 60) * 360) + ((seconds / 60) * 6) + 90;

4、时针稍微复杂一点,因为要考虑分钟的影响,如过了30分钟,相当于半小时。公式为: 当前时数 + 分钟在小时的映射。即:(( hours/ 12) * 360) + ((minutes / 60) * 30) + 90;

一程序员用javascript做了这个时钟特效,面试秒过

为了使页面能实时的更新,我们要把上面的这些东西封装为一个函数,然后用定时器每秒执行一次。

整个时钟的功能都完成了!

转载于:https://my.oschina.net/u/2391658/blog/898504

相关文章:

  • python 输出当前行号
  • WannaCry勒索比特币蠕虫病毒解决方案
  • 构建之法阶段小记五
  • 带你理解JavaScript闭包
  • 用Browserify来实现CommonJS的浏览器加载
  • 几个收藏
  • Laravel源码入门-启动引导过程(六)LoadEnvironmentVariables
  • 判断窗体 show完成
  • java.util.Date和java.sql.Date的区别和相互转化 (转)
  • 如何用Python批量发现互联网“开放”摄像头
  • 《深入理解Android 卷III》第四章 深入理解WindowManagerService
  • Android内存泄露分析之StrictMode
  • Elasticsearch教程(九) elasticsearch 查询数据 | 分页查询
  • AC日记——[NOIP2015]运输计划 cogs 2109
  • 白话空间统计之四:P值和Z值(上):零如果
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【Linux系统编程】快速查找errno错误码信息
  • Android单元测试 - 几个重要问题
  • bootstrap创建登录注册页面
  • Java编程基础24——递归练习
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • SpiderData 2019年2月16日 DApp数据排行榜
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • vuex 笔记整理
  • 阿里云应用高可用服务公测发布
  • 大主子表关联的性能优化方法
  • ------- 计算机网络基础
  • 面试遇到的一些题
  • 如何设计一个比特币钱包服务
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 微信开源mars源码分析1—上层samples分析
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 湖北分布式智能数据采集方法有哪些?
  • #Ubuntu(修改root信息)
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • $refs 、$nextTic、动态组件、name的使用
  • (09)Hive——CTE 公共表达式
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (正则)提取页面里的img标签
  • (转)C#调用WebService 基础
  • (转)关于pipe()的详细解析
  • (转载)PyTorch代码规范最佳实践和样式指南
  • **python多态
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .net 7 上传文件踩坑
  • .NET CLR Hosting 简介
  • .NET Core跨平台微服务学习资源
  • .net framework 4.0中如何 输出 form 的name属性。
  • .NET 中让 Task 支持带超时的异步等待
  • .NET6实现破解Modbus poll点表配置文件
  • .NetCore项目nginx发布