秒表【JavaScript】

embedded/2024/9/24 7:20:46/

这个代码实现了一个基本的功能性秒表。

实现功能:

代码:

<!DOCTYPE html>
<html lang="zh"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>秒表</title><style>#stopwatch {font-size: 2em;margin-bottom: 20px;}button {font-size: 1.5em;margin: 5px;}</style></head><body><div id="stopwatch">00:00:00</div><button id="startBtn">开始</button><button id="stopBtn">停止</button><button id="resetBtn">重置</button><script>let startTime = 0;let elapsedTime = 0;let timerInterval;const stopwatchDisplay = document.getElementById('stopwatch');function formatTime(time) {const hours = String(Math.floor((time / 3600000) % 60)).padStart(2, '0');const minutes = String(Math.floor((time / 60000) % 60)).padStart(2, '0');const seconds = String(Math.floor((time / 1000) % 60)).padStart(2, '0');return `${hours}:${minutes}:${seconds}`;}function startTimer() {// 确保在被按下时,计时器已经被清除if (timerInterval) {clearInterval(timerInterval);}startTime = Date.now() - elapsedTime;timerInterval = setInterval(() => {elapsedTime = Date.now() - startTime;stopwatchDisplay.textContent = formatTime(elapsedTime);}, 1000);}function stopTimer() {clearInterval(timerInterval);}function resetTimer() {clearInterval(timerInterval);elapsedTime = 0;stopwatchDisplay.textContent = formatTime(elapsedTime);startTime = 0; // 重置启动时间,确保计时从零开始}document.getElementById('startBtn').onclick = startTimer;document.getElementById('stopBtn').onclick = stopTimer;document.getElementById('resetBtn').onclick = resetTimer;</script></body>
</html>

部分代码解析:

1. 变量声明

javascript">let startTime = 0;        // 记录秒表开始的时间(毫秒)
let elapsedTime = 0;      // 记录已经经过的时间(毫秒)
let timerInterval;        // 用于存储setInterval的返回值,以便后续清除
const stopwatchDisplay = document.getElementById('stopwatch'); // 获取秒表显示的DOM元素

2. 时间格式化函数

javascript">function formatTime(time) {const hours = String(Math.floor((time / 3600000) % 60)).padStart(2, '0');const minutes = String(Math.floor((time / 60000) % 60)).padStart(2, '0');const seconds = String(Math.floor((time / 1000) % 60)).padStart(2, '0');return `${hours}:${minutes}:${seconds}`;
}
  • 功能:将经过的时间(以毫秒为单位)转换为hh:mm:ss格式。
  • 具体步骤
    • Math.floor((time / 3600000) % 60):计算小时数并取模以确保小时数不超过59(在这里其实可以去掉% 60,因为小时数会超过60)。
    • Math.floor((time / 60000) % 60):计算分钟数。
    • Math.floor((time / 1000) % 60):计算秒数。
    • padStart(2, '0'):确保每部分至少是两位数。

3. 启动计时器函数

javascript">function startTimer() {if (timerInterval) {clearInterval(timerInterval); // 如果计时器已经在运行,则先清除它}startTime = Date.now() - elapsedTime; // 计算实际开始时间,减去已用时间timerInterval = setInterval(() => {elapsedTime = Date.now() - startTime; // 计算经过的时间stopwatchDisplay.textContent = formatTime(elapsedTime); // 更新显示}, 1000); // 每秒更新一次
}
  • 功能:开始计时器。
  • 逻辑
    • 如果计时器已经在运行,先用clearInterval停止它,避免重叠。
    • startTime设置为当前时间减去已经过的时间。
    • setInterval每秒更新一次elapsedTime并刷新显示。

4. 停止计时器函数

javascript">function stopTimer() {clearInterval(timerInterval); // 清除当前计时器
}
  • 功能:停止计时器。
  • 逻辑:通过调用clearInterval(timerInterval)停止定时器。

5. 重置计时器函数

javascript">function resetTimer() {clearInterval(timerInterval); // 清除当前计时器elapsedTime = 0; // 重置经过的时间为0stopwatchDisplay.textContent = formatTime(elapsedTime); // 更新显示startTime = 0; // 重置开始时间,确保计时从零开始
}
  • 功能:重置计时器。
  • 逻辑
    • 首先停止计时器。
    • elapsedTime设置为0并更新显示为00:00:00
    • 重置startTime,确保下一次启动时从零开始。

6. 事件绑定

javascript">document.getElementById('startBtn').onclick = startTimer;
document.getElementById('stopBtn').onclick = stopTimer;
document.getElementById('resetBtn').onclick = resetTimer;
  • 功能:将按钮的点击事件与相应的函数绑定。
  • 逻辑:当用户点击“开始”、“停止”或“重置”按钮时,分别调用对应的函数。

http://www.ppmy.cn/embedded/115970.html

相关文章

git学习报告

文章目录 git学习报告如何配置vscode终端安装PowerShell安装 Microsoft.Powershell.Preview使用 git的使用关于团队合作 git指令本地命令&#xff1a;云端指令 git学习报告 如何配置vscode 安装powershell调教window终端&#xff0c;使其像Linux一样&#xff0c;通过Linux命令…

CVE-2024-44902 Thinkphp反序列化漏洞

Thinkphp v6.1.3至v8.0.4版本中存在反序列化漏洞&#xff0c;攻击者可利用此漏洞执行任意代码。 影响版本 v6.1.3 < thinkphp < v8.0.4 环境搭建 环境&#xff1a;php8.0.2thinkphp8.0.4memcached3.2.0 首先搭建 thinkphp 环境&#xff1a;thinkPHP 8.0.4 安装_thin…

新提案:C++将变得内存安全

革命性的提案&#xff1a;C 将添加借用检查、生命周期、mut、sendsync 在遭受内存安全棒的打击两年后&#xff0c;C 社区发布了一项提案&#xff0c;以帮助开发人员编写更不容易受到攻击的代码。 Safe C 扩展提案旨在解决易受攻击的编程语言的致命弱点&#xff0c;即确保代码…

Leetcode面试经典150题-130.被围绕的区域

给你一个 m x n 的矩阵 board &#xff0c;由若干字符 X 和 O 组成&#xff0c;捕获 所有 被围绕的区域&#xff1a; 连接&#xff1a;一个单元格与水平或垂直方向上相邻的单元格连接。区域&#xff1a;连接所有 O 的单元格来形成一个区域。围绕&#xff1a;如果您可以用 X 单…

【Android】模糊搜索与数据处理

【Android】模糊搜索与数据处理 本篇博客主要以根据输入内容动态获取城市为例进行讲解。 获取城市 这一部分主要是根据输入的信息去动态获取城市信息 首先定义了一个名为 NetUtil 的类&#xff0c;主要用于通过 HTTP 请求获取城市信息。 public class NetUtil {private stat…

git 介绍+常用命令

一、介绍 Git 是一个开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或小或大的项目。 Git 是创始人 Linus Torvalds&#xff0c;这个人是Linux系统的创始人&#xff0c;超级大佬)&#xff0c;他是为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软…

分布式环境中,接口超时到底怎么处理?

目录标题 为什么会存在超时?如何应对可能发生的超时?1. 设置合理的超时时间2. 重试机制3. 熔断机制4. 监控和报警5. 日志记录6. 限流和降级7. 异步处理 以上总结 为什么会存在超时? 接口超时是分布式系统中常见的问题&#xff0c;其原因多种多样&#xff0c;涉及网络、服务…

鸿蒙环境服务端签名直传文件到OSS

本文介绍如何在鸿蒙环境下将文件上传到OSS。 背景信息 鸿蒙环境是当下比较流行的操作环境&#xff0c;与服务端签名直传的原理类似&#xff0c;鸿蒙环境上传文件到OSS是利用OSS提供的PutObject接口来实现文件上传到OSS。关于PutObject的详细介绍&#xff0c;请参见PutObject。…