秒表【JavaScript】

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

实现功能:

代码:

<!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. 变量声明

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

2. 时间格式化函数

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. 启动计时器函数

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. 停止计时器函数

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

5. 重置计时器函数

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

6. 事件绑定

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/149474.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

文档矫正算法:DocTr++

文档弯曲矫正&#xff08;Document Image Rectification&#xff09;的主要作用是在图像处理领域中&#xff0c;对由于拍摄、扫描或打印过程中产生的弯曲、扭曲文档进行校正&#xff0c;使其恢复为平整、易读的形态。 一. 论文和代码 论文地址&#xff1a;https://arxiv.org/…

Android NestedScrollView+TabLayout+ViewPager+ 其它布局,ViewPager 不显示以及超出屏幕不显示问题

前言 此场景为 NestedScrollView 嵌套多个布局 &#xff0c;大致结构为 NestedScrollViewTabLayoutViewPagerfragment 其它View,如下图 &#xff0c; 一、ViewPager 设置高度才会显示内容问题 原因&#xff1a;NestedScrollView 计算高度先于 ViewPager 渲染前&#xff0c;所…

动手学深度学习8.7. 通过时间反向传播-笔记练习(PyTorch)

本节课程地址&#xff1a;本节无视频 本节教材地址&#xff1a;8.7. 通过时间反向传播 — 动手学深度学习 2.0.0 documentation (d2l.ai) 本节开源代码&#xff1a;...>d2l-zh>pytorch>chapter_multilayer-perceptrons>bptt.ipynb 通过时间反向传播 到目前为止&…

输出Hate-C语言

1.问题&#xff1a; C语言实现先后输出Hate四个字符。 2.解答&#xff1a; 定义4个字符变量&#xff0c;分别赋以初值H、a、t、e&#xff0c;然后用putchar函数输出4个字符变量的值。 3.代码&#xff1a; #include<stdio.h>int main(){char character1,character2,ch…

ArcGIS Desktop使用入门(三)图层右键工具——拓扑(下篇:地理数据库拓扑)

系列文章目录 ArcGIS Desktop使用入门&#xff08;一&#xff09;软件初认识 ArcGIS Desktop使用入门&#xff08;二&#xff09;常用工具条——标准工具 ArcGIS Desktop使用入门&#xff08;二&#xff09;常用工具条——编辑器 ArcGIS Desktop使用入门&#xff08;二&#x…

CSS中的多种关系选择器

后代选择器 选择所有被E元素包含的F元素&#xff0c;中间用空格隔开。 例&#xff1b; <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title…

使用Docker一键部署Blossom笔记软件

Blossom 是一个需要私有部署的笔记软件,虽然本身定位是一个云端软件,但你仍然可以在本地部署,数据和图片都将保存在你的设备,不依赖任何的图床或者对象存储。 客户端:支持 Windows 端和 ARM 架构的 Mac 端,以及作为网页端部署。移动端:响应式网页移动端,主要为移动端设…

基于单片机的智能窗帘控制系统

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机&#xff0c;采用DHT11温湿度传感器检测温湿度&#xff0c;滑动变阻器连接ADC0832数模转换器转换模拟,光敏传感器&#xff0c;采用GP2D12红外传感器&#xff0c;通过LCD1602显示屏显示…

3DMAX乐高建筑生成器插件LegoBuilding使用方法详解

3DMAX乐高建筑生成器插件LegoBuilding使用教程 3DMAX乐高建筑生成器插件LegoBuilding&#xff0c;一键批量生成随机的乐高积木样式建筑群&#xff0c;可作为配景楼建模使用。可根据闭合样条线画定范围或地形&#xff08;网格&#xff09;对象表面范围和起伏批量生成随机形状的乐…

浮游生物检测系统源码分享

浮游生物检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

使用【Sa-Token】实现Http Basic 认证

使用Sa-Token开源架构快速实现Http Basic 认证&#xff0c;如上图 1、springboot环境下直接添加starter即可 <!-- Sa-Token 权限认证&#xff0c;在线文档&#xff1a;https://sa-token.cc --> <dependency><groupId>cn.dev33</groupId><artifactI…

04-Docker常用命令

04-Docker常用命令 启动类命令 启动docker systemctl start docker停止docker systemctl stop docker重启docker systemctl restart docker查看docker状态 systemctl status docker开机启动docker systemctl enable docker帮助类命令 查看docker版本 docker version查…

ubuntu中如何查看类型(函数)定义的头文件

问题&#xff1a; 1.该如何查找函数&#xff0c;或者数据类型的头文件&#xff1f; 方法&#xff1a; 1.使用vim搭配ctags 2.使用vscode 使用vscode查看头文件位置的步骤&#xff1a; 1.例如下图&#xff0c;我想添加包含file_operations的头文件 2.双击选中数据类型&#xf…

git笔记之在多个分支中复用某个分支提交的更改

git笔记之在多个分支中复用某个分支提交的更改 code review! 文章目录 git笔记之在多个分支中复用某个分支提交的更改1.实现该功能的 Bash 脚本示例2.这个脚本是否可以处理新添加的文件&#xff1f;3.该脚本使用前&#xff0c;应先使用下述脚本重置本地仓库所有分支与远程保持一…

GPU硬件如何实现光栅化?

版权声明 本文为“优梦创客”原创文章&#xff0c;您可以自由转载&#xff0c;但必须加入完整的版权声明文章内容不得删减、修改、演绎本文视频版本&#xff1a;见文末 引言 大家好&#xff0c;我是老雷&#xff0c;今天我想从GPU硬件原理出发&#xff0c;给大家分享在图形渲…

54 循环神经网络RNN_by《李沐:动手学深度学习v2》pytorch版

系列文章目录 文章目录 系列文章目录循环神经网络使用循环神经网络的语言模型困惑度&#xff08;perplexity&#xff09;梯度剪裁 循环神经网络 使用循环神经网络的语言模型 输入“你”&#xff0c;更新隐变量&#xff0c;输出“好”。 困惑度&#xff08;perplexity&#xff…

基于真实山地场景下的超多目标优化算法求解无人机三维路径规划,MATLAB代码

超多目标优化算法是一类专门用于解决存在三个以上目标函数的最优化问题的算法。这类问题在现实世界中非常常见&#xff0c;例如在工程设计、资源管理、机器学习等领域。由于目标之间的冲突性&#xff0c;很难找到一个单一的解来同时优化所有目标&#xff0c;因此超多目标优化算…

商标管理软件如何同步官方数据确保商标管理精准高效?

企业在商标管理中面临着诸多挑战&#xff0c;包括但不限于商标的续展监控、撤三与被撤三案件的应对、无效宣告的处理以及商标申请人变更的跟踪等。这些环节错综复杂&#xff0c;且对时效性要求极高&#xff0c;稍有疏忽便可能导致商标权益的受损。启服云商标管理软件凭借其强大…

云安全 | 利用易受攻击的 Lambda 函数泄露 AWS 账户信息云安全 | 利用易受攻击的 Lambda 函数泄露 AWS 账户信息

人们普遍认为云托管服务比传统服务更安全。由于它在基础设施级别上这个观点可能部分正确&#xff0c;但它们仍然具有可能导致其漏洞的用户控制元素。 接下来将探讨如何利用易受攻击的 Lambda 函数并泄露其 AWS 账户信息。 在我们开始讨论之前&#xff0c;让我们先回顾一下基本…

Kibana中突然看不到日志ElasticSearch突然采集不到日志问题解决分析

问题原因 起因之前我们项目是采用elk&#xff08;elasticsearchlogstashkibana&#xff09;的方式下部署日志采集系统&#xff0c;今天突然发现Kibana中所有项目日志都没打印&#xff0c;更奇怪的是线上的项目都正常运行&#xff0c;并无异常&#xff0c;这时让人陷入了深思&a…