当前位置:首页 > JavaScript

怎么实现秒表js

2026-03-15 22:49:44JavaScript

实现秒表的基本思路

使用JavaScript的Date对象或performance.now()来获取精确的时间差,结合setIntervalrequestAnimationFrame更新显示。核心逻辑包括记录开始时间、计算经过时间并格式化输出。

怎么实现秒表js

基本HTML结构

<div id="stopwatch">00:00:00.000</div>
<button id="startBtn">开始</button>
<button id="stopBtn">停止</button>
<button id="resetBtn">重置</button>

JavaScript实现代码

let startTime;
let elapsedTime = 0;
let timerInterval;
const display = document.getElementById('stopwatch');

function formatTime(ms) {
  const date = new Date(ms);
  const hours = date.getUTCHours().toString().padStart(2, '0');
  const minutes = date.getUTCMinutes().toString().padStart(2, '0');
  const seconds = date.getUTCSeconds().toString().padStart(2, '0');
  const milliseconds = date.getUTCMilliseconds().toString().padStart(3, '0');
  return `${hours}:${minutes}:${seconds}.${milliseconds}`;
}

function startTimer() {
  startTime = Date.now() - elapsedTime;
  timerInterval = setInterval(() => {
    elapsedTime = Date.now() - startTime;
    display.textContent = formatTime(elapsedTime);
  }, 10);
}

function stopTimer() {
  clearInterval(timerInterval);
}

function resetTimer() {
  clearInterval(timerInterval);
  elapsedTime = 0;
  display.textContent = '00:00:00.000';
}

document.getElementById('startBtn').addEventListener('click', startTimer);
document.getElementById('stopBtn').addEventListener('click', stopTimer);
document.getElementById('resetBtn').addEventListener('click', resetTimer);

高精度版本(使用performance.now)

let startTime;
let elapsedTime = 0;
let timerInterval;
const display = document.getElementById('stopwatch');

function formatTime(ms) {
  const date = new Date(ms);
  return date.toISOString().substr(11, 12);
}

function startTimer() {
  startTime = performance.now() - elapsedTime;
  timerInterval = requestAnimationFrame(function updateTimer() {
    elapsedTime = performance.now() - startTime;
    display.textContent = formatTime(elapsedTime);
    timerInterval = requestAnimationFrame(updateTimer);
  });
}

function stopTimer() {
  cancelAnimationFrame(timerInterval);
}

function resetTimer() {
  cancelAnimationFrame(timerInterval);
  elapsedTime = 0;
  display.textContent = '00:00:00.000';
}

功能扩展建议

  1. 添加分圈计时功能,记录多个时间点
  2. 增加键盘快捷键控制(如空格键开始/停止)
  3. 使用CSS美化界面,添加动画效果
  4. 实现本地存储,保存历史记录

注意事项

  1. setInterval的精度受浏览器限制,通常最低为4ms
  2. 使用performance.now()可获得更高精度(微秒级)
  3. 移动端需注意触摸事件和性能优化
  4. 长时间运行时需处理数字溢出问题

标签: 秒表js
分享给朋友:

相关文章

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js实现搜索

js实现搜索

实现搜索功能的方法 在JavaScript中实现搜索功能可以通过多种方式完成,以下是几种常见的实现方法。 使用数组的filter方法 通过数组的filter方法可以筛选出符合条件的数据项。假设有一个…

js图片轮播的实现

js图片轮播的实现

基础图片轮播实现 使用HTML、CSS和JavaScript实现一个简单的图片轮播效果。HTML部分定义轮播容器和图片,CSS负责样式和过渡效果,JavaScript处理逻辑。 <div cl…

js实现显示隐藏

js实现显示隐藏

显示隐藏的实现方法 在JavaScript中,实现元素的显示和隐藏可以通过多种方式完成。以下是几种常见的方法: 修改CSS的display属性 通过改变元素的display属性可以在none(隐藏)…

js实现排序

js实现排序

数组排序方法 JavaScript提供了内置的sort()方法用于数组排序。默认情况下,sort()将元素转换为字符串并按照Unicode码点排序。对于数字排序,需传入比较函数。 const num…