博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Day02 - JavaScript + CSS Clock
阅读量:5903 次
发布时间:2019-06-19

本文共 1913 字,大约阅读时间需要 6 分钟。

Day02 - JavaScript + CSS Clock

作者:©

简介: 是 推出的一个 30 天挑战。项目免费提供了 30 个视频教程、30 个挑战的起始文档和 30 个挑战解决方案源代码。目的是帮助人们用纯 JavaScript 来写东西,不借助框架和库,也不使用编译器和引用。现在你看到的是这系列指南的第 2 篇。完整指南在 。

简介

第二天的练习是用JS+CSS模拟时钟效果。

效果如下:

clock

实现以上模拟时钟的效果,大致思路和解决方案如下:

  • 分别获取到当前时间的时、分、秒。

  • 通过时分秒对一圈360度,进行映射,确定每一个指针所需旋转的角度。

  • 通过CSS的transform:rotate(deg),来实时的调整指针在键盘中的位置。

页面布局

CSS样式

涉及到的特性:

  • transform-oragin

调整指针的初始位置以及旋转的轴点:

transform-oragin: 100%; //初始化使三个指针全部指向12时
  • transform: rotate()

设置旋转角度

  • transition

transition: all //0.05s;设置动画时间为0.05秒
  • transition-timing-function: cubic-bezier(x, x, x, x)

设置 transition-time-function 的值,以实现秒针“滴答滴答”的效果。此外注意 transform 中的 rotate (旋转)属性由角度来控制,可以试着在页面上修改这个参数来查看效果。

JS代码

  • 获取秒针、分钟、小时节点

const secondHand = document.querySelector('.second-hand');    const minsHand = document.querySelector('.min-hand');    const hourHand = document.querySelector('.hour-hand');
  • 获取当前时间秒、分、小时

const now = new Date();const seconds = now.getSeconds();const mins = now.getMinutes();const hour = now.getHours();
  • 计算秒、分、小时角度

const secondsDegrees = ((seconds / 60) * 360) + 90;const minsDegrees = ((mins / 60) * 360) + ((seconds / 60) * 6) + 90;const hourDegrees = ((hour / 12) * 360) + ((mins / 60) * 30) + 90;
  • 根据角度设置样式

secondHand.style.transform = `rotate(${secondsDegrees}deg)`;minsHand.style.transform = `rotate(${minsDegrees}deg)`;hourHand.style.transform = `rotate(${hourDegrees}deg)`;
  • 设置定时器,每秒调用一次setDate函数

setInterval(setDate, 1000);

延伸思考

此处存在一个小瑕疵,当秒针旋转一圈之后回到初始位置,开始第二圈旋转,角度值的变化时 444° → 90° → 96° .... 这个过程中,指针会先逆时针从 444° 旋转至 90°,再继续我们期望的顺时针旋转,由于秒针变换时间只有 0.05s,所以呈现的效果就是秒针闪了一下,如果想要观察细节,可以将 .second 设为 transition: all 1s,效果如下所示:

要解决这个问题,目前找到了两种解决办法:

  • 第一种

  • 第二种

既然引发问题的是角度的大小变化,那就可以对这个值进行处理。此前的代码中,每秒都会重新 new 一个 Date 对象,用来计算角度值,但如果让这个角度值一直保持增长,也就不会出现逆时针回旋的问题了。

源码下载

社群品牌:

定位:寻找共好,共同学习,持续输出全栈技术社群
业界荣誉:IT界的逻辑思维
文化:输出是最好的学习方式
官方公众号:全栈部落
社群发起人:
技术交流社区:
全栈部落完整系列教程:

关注全栈部落官方公众号,每晚十点接收系列原创技术推送

转载地址:http://yfupx.baihongyu.com/

你可能感兴趣的文章
从领先到引领,浪潮凭借的是技术自信
查看>>
月薪1.5W以下的数据分析师·面试流程(附赠考题)
查看>>
心心念念iPhone SE2来了 我已想好买它的3个理由
查看>>
再迎利好,BCH开发团队BU融合石墨烯区块传播技术
查看>>
么么直播的音视频技术实践和优化
查看>>
关于Android Studio UnsatisfiedLinkError错误的解决办法
查看>>
业务系统如何引入神经网络
查看>>
SQLMAP的前世今生Part2 数据库指纹识别
查看>>
智能设备逆向工程之外部Flash读取与分析篇
查看>>
Volatility FAQ
查看>>
从丝绸之路到安全运维(Operational Security)与风险控制(Risk Management) 上集
查看>>
简单配置实现页面修改自动刷新
查看>>
Laravel框架blade模板超新手级教程&小技巧
查看>>
React Native入门技法二
查看>>
《Java8实战》-读书笔记第一章(01)
查看>>
可能是全网最全的移动直播 trouble shooting 手册(9)—— 点播拖动不准
查看>>
linux6.8安装docker
查看>>
一步步搭建一个MVVM开发架构,以及常见问题的解决方案
查看>>
视频云资深技术专家李彬:传统企业如何进行多媒体数字化转型?
查看>>
Android 开发中不得不知道的 Tips 集合 (第三波)
查看>>