当前位置:首页 > JavaScript

js 实现秒表

2026-04-06 21:01:36JavaScript

实现秒表功能

使用JavaScript实现秒表功能可以通过Date对象或performance.now()来精确计时。以下是两种常见实现方式:

方法一:基于Date对象的秒表

class Stopwatch {
  constructor() {
    this.startTime = 0;
    this.elapsedTime = 0;
    this.isRunning = false;
  }

  start() {
    if (!this.isRunning) {
      this.startTime = Date.now() - this.elapsedTime;
      this.isRunning = true;
      this.timer = setInterval(() => this.updateDisplay(), 10);
    }
  }

  pause() {
    if (this.isRunning) {
      clearInterval(this.timer);
      this.elapsedTime = Date.now() - this.startTime;
      this.isRunning = false;
    }
  }

  reset() {
    clearInterval(this.timer);
    this.elapsedTime = 0;
    this.isRunning = false;
    document.getElementById('display').textContent = '00:00:00.000';
  }

  updateDisplay() {
    const elapsed = Date.now() - this.startTime;
    const formattedTime = this.formatTime(elapsed);
    document.getElementById('display').textContent = formattedTime;
  }

  formatTime(milliseconds) {
    const date = new Date(milliseconds);
    return date.toISOString().substr(11, 12).replace('.', ':');
  }
}

// 使用示例
const stopwatch = new Stopwatch();

方法二:基于performance.now()的高精度秒表

js 实现秒表

class HighResStopwatch {
  constructor() {
    this.startTime = 0;
    this.pausedTime = 0;
    this.isRunning = false;
  }

  start() {
    if (!this.isRunning) {
      this.startTime = performance.now() - this.pausedTime;
      this.isRunning = true;
      requestAnimationFrame(() => this.update());
    }
  }

  pause() {
    if (this.isRunning) {
      this.pausedTime = performance.now() - this.startTime;
      this.isRunning = false;
    }
  }

  reset() {
    this.pausedTime = 0;
    this.isRunning = false;
    document.getElementById('display').textContent = '00:00:00.000';
  }

  update() {
    if (this.isRunning) {
      const elapsed = performance.now() - this.startTime;
      document.getElementById('display').textContent = this.formatTime(elapsed);
      requestAnimationFrame(() => this.update());
    }
  }

  formatTime(milliseconds) {
    const date = new Date(milliseconds);
    return date.toISOString().substr(11, 12).replace('.', ':');
  }
}

HTML结构示例

<div id="stopwatch">
  <div id="display">00:00:00.000</div>
  <button onclick="stopwatch.start()">Start</button>
  <button onclick="stopwatch.pause()">Pause</button>
  <button onclick="stopwatch.reset()">Reset</button>
</div>

CSS样式建议

#stopwatch {
  font-family: monospace;
  font-size: 2em;
  text-align: center;
}

#display {
  margin: 20px;
}

button {
  padding: 10px 20px;
  margin: 5px;
  font-size: 1rem;
}

注意事项

  • performance.now()提供更高精度的时间测量(微秒级)
  • 使用requestAnimationFramesetInterval更适合动画和频繁更新的显示
  • 清除定时器或动画帧很重要,避免内存泄漏
  • 时间格式化可以根据需求调整显示格式

两种实现方式都可以扩展添加更多功能,如分段时间记录、多计时器等。根据项目需求选择合适的方法,高精度计时推荐使用performance.now()方案。

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

相关文章

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

js 实现倒计时

js 实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是两种常见实现方式。 使用 setInterval 实…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js实现跑马灯

js实现跑马灯

实现跑马灯效果 使用HTML和JavaScript可以轻松实现跑马灯效果。以下是两种常见的实现方式: HTML结构 <div id="marquee"> <span>…

vue实现秒表组件

vue实现秒表组件

实现秒表组件的基本思路 使用Vue实现秒表组件需要管理时间状态、控制计时器的启动/暂停/重置功能,并通过计算属性动态显示格式化时间。核心逻辑包括利用setInterval更新计时数据,并通过生命周期钩…