首页 > 编程语言 >请使用js实现一个秒表计时器的程序

请使用js实现一个秒表计时器的程序

时间:2024-12-08 09:33:02浏览次数:4  
标签:00 const js 计时器 startTime stopwatch isRunning 秒表

<!DOCTYPE html>
<html>
<head>
<title>秒表计时器</title>
<style>
#stopwatch {
  font-size: 2em;
  font-family: monospace; /* 使用等宽字体 */
}
</style>
</head>
<body>

<div id="stopwatch">00:00:00</div>
<button id="start">开始</button>
<button id="stop">停止</button>
<button id="reset">重置</button>

<script>
  let startTime = 0;
  let timerInterval;
  let isRunning = false;

  const stopwatch = document.getElementById('stopwatch');
  const startButton = document.getElementById('start');
  const stopButton = document.getElementById('stop');
  const resetButton = document.getElementById('reset');

  function formatTime(milliseconds) {
    const totalSeconds = Math.floor(milliseconds / 1000);
    const seconds = totalSeconds % 60;
    const minutes = Math.floor(totalSeconds / 60) % 60;
    const hours = Math.floor(totalSeconds / 3600);

    return `${pad(hours)}:${pad(minutes)}:${pad(seconds)}`;
  }

  function pad(number) {
    return number < 10 ? `0${number}` : number;
  }

  startButton.addEventListener('click', () => {
    if (!isRunning) {
      startTime = Date.now() - (startTime ? Date.now() - startTime : 0); //  从上次停止的时间继续
      timerInterval = setInterval(() => {
        const elapsedTime = Date.now() - startTime;
        stopwatch.textContent = formatTime(elapsedTime);
      }, 10); //  每10毫秒更新一次,更精确
      isRunning = true;
    }
  });

  stopButton.addEventListener('click', () => {
    if (isRunning) {
      clearInterval(timerInterval);
      isRunning = false;
    }
  });

  resetButton.addEventListener('click', () => {
    clearInterval(timerInterval);
    stopwatch.textContent = "00:00:00";
    startTime = 0;
    isRunning = false;
  });

</script>

</body>
</html>

改进说明:

  • 精度更高: 使用setInterval每10毫秒更新一次显示,使计时更精确。
  • 暂停后继续计时: startTime的处理逻辑更改,现在暂停后再次点击开始可以从暂停的时间点继续计时。
  • 格式化输出: 使用pad()函数确保时间显示始终为两位数,例如00:00:00
  • 代码更清晰: 使用更具描述性的变量名和注释,提高代码可读性。
  • isRunning状态变量: 使用isRunning变量跟踪计时器的运行状态,防止重复启动或停止。

使用方法:

  1. 将代码复制保存为HTML文件 (例如 stopwatch.html)。
  2. 使用浏览器打开该HTML文件。
  3. 点击"开始"按钮开始计时,点击"停止"按钮停止计时,点击"重置"按钮将计时器重置为0。

这个改进版本提供了更精确、更易用的秒表计时器功能。

标签:00,const,js,计时器,startTime,stopwatch,isRunning,秒表
From: https://www.cnblogs.com/ai888/p/18593055

相关文章

  • Node.js 创建第一个应用
    在传统的PHP开发中,需要一个像Apache或Nginx这样的HTTP服务器,并且需要配置mod_php或php-cgi来处理PHP脚本,从而生成动态内容,也就是说PHP依赖于外部的HTTP服务器来接收请求并提供Web页面。Node.js本身就内置了一个HTTP服务器模块,这意味着在使用Node.js......
  • Node.js REPL(交互式解释器)
    Node.js提供了一个内置的REPL(Read-Eval-PrintLoop),这是一个交互式编程环境,可以在终端中运行JavaScript代码。REPL的名称来源于它的主要操作:读取(Read)、执行(Eval)、打印(Print)和循环(Loop)。Node自带了交互式解释器,可以执行以下任务:读取(Read) -读取用户输入,解析输入的Ja......
  • 写一个单向链数据结构的 js 实现并标注复杂度
    classNode{constructor(data){this.data=data;this.next=null;}}classLinkedList{constructor(){this.head=null;this.size=0;//Keeptrackofthelistsize}//Addanewnodetotheendofthelist(append)......
  • js中的undefined和 ReferenceError: xxx is not defined 有什么区别?
    在JavaScript中,undefined和ReferenceError:xxxisnotdefined虽然都表示变量在某种程度上不可用,但它们代表了不同的情况:undefined:表示一个变量已被声明,但尚未赋值。它是一个JavaScript的内置值,表示变量存在于作用域中,但它没有被赋予任何具体的值。letmyVariable;......
  • 学习threejs,实现配合使用WebWorker
    ......
  • Js逆向学习过程
    Js逆向-字段追踪本文章是记录本人学习Js逆向的相关学习过程,后续会持续更新,欢迎大家点评指正。点点数据基本情况在进行浏览器头部签名堆栈分析时,我们首先需要了解一些基本情况:页面地址:https://app.diandian.com/定位接口:https://api.diandian.com/pc/app/v1/user/favor......
  • JAVA开源毕业设计 课程作业管理系统 Vue.JS+SpringBoot+MySQL
    本文项目编号T023,文末自助获取源码\color{red}{T023,文末自助获取源码}......
  • JAVA开源毕业设计 社区团购系统 Vue.JS+SpringBoot+MySQL
    本文项目编号T024,文末自助获取源码\color{red}{T024,文末自助获取源码}......
  • node.js毕设高校宿舍报修管理系统 论文+程序
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于高校宿舍报修管理系统的研究,现有研究主要以高校后勤管理系统中的部分功能涉及为主,专门针对高校宿舍报修管理系统全面功能与流程优化的研究较少。在......
  • node.js毕设基于Java的房屋租赁系统的设计与实现 论文+程序
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于房屋租赁系统的研究,现有研究主要以系统的基本功能实现为主,如用户、房东、房屋信息等模块的构建。在国内外,许多地区已经广泛应用各类房屋租赁管理系......