让时钟转起来
创作时间:
作者:
@小白创作中心
让时钟转起来
引用
CSDN
1.
https://blog.csdn.net/lowkeyyh/article/details/145271636
在JavaScript中,对于时间的处理,往往需要借助于
Date
对象操作来完成。但是,仅仅使用它来获取时间是无法满足日常业务需求的。例如,有时候我们需要将时间从枯燥的数字转化为更能吸引用户眼球的动态时钟。我们该如何实现呢?
在本节挑战中,我们就遇到了类似情况:
上图中的动态时钟效果,是通过HTML和CSS结合JS中的Date对象来实现的。
本节挑战的代码中,还未实现秒针转动的效果。希望你能观察代码的特点,让秒针转起来。
测试效果
可以通过如下步骤测试效果:
- 右键
01/index.html
,选择Open with Live Server
。 - 点击右侧的Web服务。
具体操作参考下图:
上述操作会在浏览器中打开新的标签页,如下图所示,请点击01
文件夹:
之后,你将看到如下效果:
请根据下述挑战要求,通过修改01/index.js
文件,达到让秒针转动起来的效果。
挑战需求
- 秒针的旋转方向应为顺时针。
- 秒针每次旋转的角度为
6deg
,且需与当前时间对应。 - 切勿改动源代码中已写好的部分。
要求规定
- 请严格按照考试步骤操作,切勿修改考试默认提供项目中的文件名称、文件夹路径等。
- 满足题目需求后,保持Web服务处于可以正常访问状态,点击「提交检测」系统会自动判分。
- 不要篡改已提供的基础项目中的
id
和class
等属性值及DOM结构,以免造成检测失败。
通关代码
const oHoure = document.createElement('div');
const oMinute = document.createElement('div');
const oSecond = document.createElement('div');
oHoure.setAttribute('id', 'houre');
oMinute.setAttribute('id','minute');
oSecond.setAttribute('id','second');
oHoure.classList.add('pointer');
oMinute.classList.add('pointer');
oSecond.classList.add('pointer');
const container = document.querySelector('.container');
container.append(oHoure);
container.append(oMinute);
container.append(oSecond);
const nowTime = new Date();
const nowHoure = nowTime.getHours();
const nowMinute = nowTime.getMinutes();
const nowSecond = nowTime.getSeconds();
const houreDeg = (nowMinute / 60) * 30;
const minuteDeg = (nowSecond / 60) * 6;
const secondDeg = nowSecond * 6;
oHoure.style.transform = `rotate(${nowHoure * 30 + houreDeg}deg)`;
oMinute.style.transform = `rotate(${nowMinute * 6 + minuteDeg}deg)`;
oSecond.style.transform = `rotate(${secondDeg}deg)`;
代码解析
HTML 部分
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://labfile.oss.aliyuncs.com/courses/9203/style01.css">
<div><span>9</span></div>
<div><span>10</span></div>
<div><span>11</span></div>
<div><span>12</span></div>
<div><span>1</span></div>
<div><span>2</span></div>
<div><span>3</span></div>
<div><span>4</span></div>
<div><span>5</span></div>
<div><span>6</span></div>
<div><span>7</span></div>
<div><span>8</span></div>
const oNumber=document.getElementById("number");
const oDiv=oNumber.getElementsByTagName("div");
const oSpan=oNumber.getElementsByTagName("span");
for(let i=0;i<oDiv.length;i++){
oDiv[i].style.WebkitTransform="rotate(" + i * 30 + "deg)";
for(let j=0;j<oSpan.length;j++){
oSpan[j].style.WebkitTransform="rotate("+ j * -30 + "deg)";
<script src="index.js" type="module"></script>
详细解释:
<!DOCTYPE html>
:声明这是一个HTML5文档。<html lang="en">
:定义HTML文档的语言为英语。<head>
:包含文档的元数据。<meta charset="UTF-8">
:指定文档使用UTF-8字符编码。<meta name="viewport" content="width=device-width, initial-scale=1.0">
:设置视口的属性,以适应不同设备的屏幕宽度,并设置初始缩放比例为1.0。<title>让时钟转起来</title>
:设置网页的标题。<link rel="stylesheet" href="https://labfile.oss.aliyuncs.com/courses/9203/style01.css">
:引入外部样式表,为页面添加样式。
<body>
:包含页面的主体内容。<div id="warp">
:一个具有id
为warp
的容器元素,可能用于包裹整个时钟。<div id="clock">
:一个具有id
为clock
的元素,可能是时钟的主要显示区域。<div id="number">
:可能是用于显示时钟上的数字的容器。- 包含多个
<div><span>X</span></div>
:其中X
是从1到12的数字,这些元素可能是时钟的数字标记。
- 包含多个
<div class="container">
:一个具有class
为container
的元素,可能是用于容纳时钟指针的容器。
JavaScript 部分
const oNumber = document.getElementById("number");
const oDiv = oNumber.getElementsByTagName("div");
const oSpan = oNumber.getElementsByTagName("span");
for (let i = 0; i < oDiv.length; i++) {
oDiv[i].style.WebkitTransform = "rotate(" + i * 30 + "deg)";
for (let j = 0; j < oSpan.length; j++) {
oSpan[j].style.WebkitTransform = "rotate(" + j * -30 + "deg)";
const oNumber = document.getElementById("number");
:通过id
获取到id
为number
的元素,存储在oNumber
变量中。const oDiv = oNumber.getElementsByTagName("div");
:获取oNumber
元素内的所有div
元素,存储在oDiv
变量中。const oSpan = oNumber.getElementsByTagName("span");
:获取oNumber
元素内的所有span
元素,存储在oSpan
变量中。- 第一个
for
循环:将oDiv
元素集合中的每个元素按i * 30
度旋转,可能是为了将数字元素旋转到时钟的不同位置。 - 第二个
for
循环:将oSpan
元素集合中的每个元素按j * -30
度旋转,可能是为了调整数字的显示方向,使其正确显示在时钟上。
<script src="index.js" type="module"></script>
- 引入外部的
index.js
文件,且以模块的形式加载。
const oHoure = document.createElement('div');
const oMinute = document.createElement('div');
const oSecond = document.createElement('div');
oHoure.setAttribute('id', 'houre');
oMinute.setAttribute('id','minute');
oSecond.setAttribute('id','second');
oHoure.classList.add('pointer');
oMinute.classList.add('pointer');
oSecond.classList.add('pointer');
const container = document.querySelector('.container');
container.append(oHoure);
container.append(oMinute);
container.append(oSecond);
- 创建三个
div
元素分别代表时针(oHoure
)、分针(oMinute
)、秒针(oSecond
),并设置它们的id
。 - 为这三个元素添加
pointer
类,可能是为了后续通过CSS对它们进行样式控制。 - 通过
document.querySelector('.container')
找到class
为container
的元素,如果找到则将三个指针元素添加到该容器中。
const nowTime = new Date();
const nowHoure = nowTime.getHours();
const nowMinute = nowTime.getMinutes();
const nowSecond = nowTime.getSeconds();
const houreDeg = (nowMinute / 60) * 30;
const minuteDeg = (nowSecond / 60) * 6;
const secondDeg = nowSecond * 6;
oHoure.style.transform = `rotate(${nowHoure * 30 + houreDeg}deg)`;
oMinute.style.transform = `rotate(${nowMinute * 6 + minuteDeg}deg)`;
oSecond.style.transform = `rotate(${secondDeg}deg)`;
function main()
:定义一个main
函数。const nowTime = new Date();
:创建一个新的Date
对象,获取当前时间。const nowHoure = nowTime.getHours();
:获取当前的小时数。const nowMinute = nowTime.getMinutes();
:获取当前的分钟数。const nowSecond = nowTime.getSeconds();
:获取当前的秒数。const houreDeg = (nowMinute / 60) * 30;
:计算时针的旋转角度,根据分钟数计算时针的偏移角度。const minuteDeg = (nowSecond / 60) * 6;
:计算分针的旋转角度,根据秒数计算分针的偏移角度。const secondDeg = nowSecond * 6;
:计算秒针的旋转角度,秒针每秒旋转6度。oHoure.style.transform =
rotate (${nowHoure * 30 + houreDeg} deg)``:将时针旋转到相应的角度。oMinute.style.transform =
rotate (${nowMinute * 6 + minuteDeg} deg)``:将分针旋转到相应的角度。oSecond.style.transform =
rotate (${secondDeg} deg)``:将秒针旋转到相应的角度。
main();
:调用main
函数,初始化时钟指针的位置。setInterval(() => { main(); }, 1000);
:每1000毫秒(即1秒)调用一次main
函数,更新时钟指针的位置,实现时钟转动的效果。
工作流程
- 在HTML中,构建了一个时钟的基本结构,包括数字和一个用于放置指针的容器。
- 在JavaScript中,首先对时钟的数字进行旋转布局,将它们放置在正确的位置。
- 创建时针、分针和秒针元素,并添加到
container
元素中。 - 定义
main
函数,根据当前时间计算时针、分针和秒针的旋转角度,并设置它们的transform
属性进行旋转。 - 调用
main
函数初始化时钟指针的位置。 - 使用
setInterval
每1秒调用一次main
函数,根据当前时间更新时钟指针的旋转角度,从而让时钟不断转动。
热门推荐
口腔溃疡反复发作,有哪些有效的自我护理和治疗方法?
人老没老,年龄说了不算!看看这4个运动指标,你能做到几个!
2025年国产芯片市场分析及技术突破前景——基于1000万片CPU销量的数据洞察
忽视肺结节可能有哪些后果
属蛇一生有几次桃花运,哪些年份会遇到正缘
《缺氧》取消新DLC计划,转为定期免费更新
7月AI圈盘点:最火和最冷AI赛道与产品
半导体制冷技术中的冷凝水问题与解决方案
抗真菌药物知识
如何分析市场资金流动情况
积极心理学中的“心理韧性” |「每周心理学研究」专栏投稿
火腿肠质检全流程详解:从外观到微生物检测的七大环节
刚刚发布!中国城市国际传播影响力排名,武汉位列第五
起诉状的格式要求是什么?
起诉律师事务所诉状的撰写规范及实务要点
米诺地尔微针导入的频率应该是多少
火龙果的营养价值有什么
人工智能生成内容(AIGC)在数字三维模型制作中的影响与前景
离职后如何提取公积金?这些权益保护知识请收好
防水板材料有哪些,如何选择合适防水板材料
阑尾炎的人可以吃什么
企业内部员工工伤赔偿标准、流程及合法性详解:全面解读工伤权益保障
一文读懂滤光片:分类、特性与应用
Mastercam刀具路径优化指南:多轴加工技术与图层显示功能详解
Blender 4.2中EEVEE渲染引擎的重大更新及移植指南
墙面空间巧利用,打造额外收纳与展示区域
时间的本质:真实存在还是虚幻概念?
二极管稳压电源设计与调试详解
锌中毒:症状、诊断与预防全解析
种草莓的季节