JavaScipt30(第二个案例)
2024-10-20 04:09:54
承接上篇https://www.cnblogs.com/wangxi01/p/10641115.html,这是第二个案例
附上项目链接: https://github.com/wesbos/JavaScript30
这是要实现一个钟表的效果。下面是他的源码,我进行了一些注释。最开始我自己写的时候被一个东西卡住了,我知道钟表的旋转用rotate来实现,但是旋转的中心点不在钟表的中心,
我有点束手无策,大概猜到会有调整中心点的属性,不过没去查看,直接查看了源码。
.hand {
width: 50%;
height: 6px;
background: black;
position: absolute;
top: 50%;
/* 更改转换元素的位置,以达到中心点在钟表的中心 */
transform-origin: 100%;
transform: rotate(90deg);
transition: all 0.05s;
/* 指定切换效果的速度 cubic-bezier贝塞尔曲线,我查了一下,他好像是有个公式的,四个参数分别为x1,y1,x2,y2,单从数值上好像看不出快慢的规律*/
transition-timing-function: cubic-bezier(0.1, 2.7, 0.58, 1);
}
const secondHand = document.querySelector('.second-hand');
const minsHand = document.querySelector('.min-hand');
const hourHand = document.querySelector('.hour-hand'); function setDate() {
const now = new Date();
// 得到当前秒数
const seconds = now.getSeconds();
// 得到正常在圆内的度数,因为初始旋转度数为90度,所以要加上90度
const secondsDegrees = ((seconds / 60) * 360) + 90;
secondHand.style.transform = `rotate(${secondsDegrees}deg)`; const mins = now.getMinutes();
// 得到当前分钟在圆内的度数,再加上秒钟在钟表内一格所处的度数,一格为6度(360/(12*5))
const minsDegrees = ((mins / 60) * 360) + ((seconds / 60) * 6) + 90;
minsHand.style.transform = `rotate(${minsDegrees}deg)`; const hour = now.getHours();
// 得到当前小时在圆内的度数,再加上分钟在小时钟表内一格所处的度数,一格为30度(360/12)
const hourDegrees = ((hour / 12) * 360) + ((mins / 60) * 30) + 90;
hourHand.style.transform = `rotate(${hourDegrees}deg)`;
}
// 每秒渲染一次
setInterval(setDate, 1000); setDate();
备注:主要思路,拿到当前时分秒,算出它们在这一时刻分别所处的位置,渲染出来,后面定时器每秒重新渲染就可以了。
下一个案例: https://www.cnblogs.com/wangxi01/p/10641708.html
最新文章
- 自动执行任务管理---TaskManage
- 成为一名优秀的Web前端开发者
- ImageLoader框架的使用、调用系统相册显示图片并裁剪显示、保存图片的两种方式
- 在网页中嵌入地图API
- webpack入门和实战(一):webpack配置及技巧
- java解析xml文档(dom)
- Java基础之写文件——将素数写入文件中(PrimesToFile)
- c#省市联动
- 配置windows下驱动开发环境
- 【ACM/ICPC2013】线段树题目集合(一)
- mysql 插入语句
- (大数据工程师学习路径)第四步 SQL基础课程----创建数据库并插入数据
- php 生成二维码 代码示例
- Java 课程设计 ";Give it up";小游戏(团队)
- 使用stringstream对象简化类型转换
- python与机器学实践-何宇健 源代码及过程中遇到的问题
- Eclipse 00: 安装教程 + 汉化 + 简单创建java项目
- ELK日志框架(1):安装Elasticsearch组建单服务器多节点集群
- MATLAB中文件的读写和数据的导入导出
- html5 区块与内联div 与span html块级元素
热门文章
- android studio 0.8.1使用和遇到问题解决
- CBO之Full Table Scan - FTS算法
- [计算机故障]笔记本无法启动,开机启动出现“Operating System Not Found”无法进系统
- 【codevs2011】【LNOI2013】最小距离之和
- 万一的Delphi消息教程
- 2015-2016 ACM-ICPC Pacific Northwest Regional Contest (Div. 2)V - Gears
- oracle基本建表语句
- Cocos2dx如何引用第三方SO文件(Android NDK)
- ZOJ3965 Binary Tree Restoring
- MIPI接口