当前位置:首页 > JavaScript

js 实现秒表

2026-02-02 03:51:02JavaScript

js 实现秒表

实现秒表的基本思路

使用JavaScript实现秒表需要利用Date对象或performance.now()来精确计时,通过setIntervalrequestAnimationFrame更新显示时间。核心功能包括开始、暂停、重置和显示时间。

js 实现秒表

基本HTML结构

<div id="stopwatch">
  <div id="display">00:00:00.000</div>
  <button id="startBtn">开始</button>
  <button id="pauseBtn">暂停</button>
  <button id="resetBtn">重置</button>
</div>

JavaScript实现代码

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

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

  pause() {
    if (this.isRunning) {
      this.isRunning = false;
      clearInterval(this.timer);
    }
  }

  reset() {
    this.isRunning = false;
    clearInterval(this.timer);
    this.elapsedTime = 0;
    this.update();
  }

  update() {
    const currentTime = Date.now();
    this.elapsedTime = currentTime - this.startTime;
    this.display.textContent = this.formatTime(this.elapsedTime);
  }

  formatTime(milliseconds) {
    const date = new Date(milliseconds);
    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 ms = date.getUTCMilliseconds().toString().padStart(3, '0');
    return `${hours}:${minutes}:${seconds}.${ms}`;
  }
}

// 初始化秒表
const display = document.getElementById('display');
const startBtn = document.getElementById('startBtn');
const pauseBtn = document.getElementById('pauseBtn');
const resetBtn = document.getElementById('resetBtn');

const stopwatch = new Stopwatch(display);

startBtn.addEventListener('click', () => stopwatch.start());
pauseBtn.addEventListener('click', () => stopwatch.pause());
resetBtn.addEventListener('click', () => stopwatch.reset());

高精度计时方案

对于需要更高精度的场景,可以使用performance.now()替代Date.now()

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

update() {
  if (!this.isRunning) return;
  const currentTime = performance.now();
  this.elapsedTime = currentTime - this.startTime;
  this.display.textContent = this.formatTime(this.elapsedTime);
  this.timer = requestAnimationFrame(() => this.update());
}

pause() {
  if (this.isRunning) {
    this.isRunning = false;
    cancelAnimationFrame(this.timer);
  }
}

功能扩展建议

  • 添加分段计时(Lap)功能
  • 支持保存历史记录
  • 添加主题切换或自定义样式
  • 实现响应式设计适配移动设备

注意事项

  • setInterval在非活动标签页中可能会降低精度,requestAnimationFrame更适用于动画场景
  • 清除定时器时务必使用clearIntervalcancelAnimationFrame
  • 时间格式化时注意时区问题(使用getUTC方法避免时区影响)

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

相关文章

js 实现vue

js 实现vue

实现 Vue 的核心功能 在 JavaScript 中实现 Vue 的核心功能需要模拟数据绑定、虚拟 DOM 和响应式系统。以下是一个简化版的实现思路: 响应式系统 通过 Object.define…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…

js实现图片

js实现图片

图片加载与显示 在JavaScript中,可以通过Image对象动态加载图片。创建实例后设置src属性触发加载,通过onload回调处理加载完成后的操作: const img = new Ima…

js进度条实现

js进度条实现

使用HTML和CSS创建基础结构 在HTML中创建一个容器元素用于显示进度条,通常使用<div>元素。CSS用于设置进度条的样式,包括宽度、高度、颜色和圆角等属性。 <div cl…