当前位置:首页 > JavaScript

js实现秒表

2026-04-05 22:28:40JavaScript

实现秒表的基本思路

使用JavaScript实现秒表需要记录开始时间、暂停时间和总运行时间。通过Date对象或performance.now()获取高精度时间戳,结合setInterval更新显示。

核心代码结构

class Stopwatch {
  constructor(displayElement) {
    this.display = displayElement;
    this.running = false;
    this.startTime = 0;
    this.pausedTime = 0;
    this.totalElapsed = 0;
  }

  start() {
    if (!this.running) {
      this.startTime = Date.now() - this.totalElapsed;
      this.running = true;
      this.updateDisplay();
    }
  }

  pause() {
    if (this.running) {
      this.totalElapsed = Date.now() - this.startTime;
      this.running = false;
    }
  }

  reset() {
    this.running = false;
    this.totalElapsed = 0;
    this.updateDisplay();
  }

  updateDisplay() {
    if (this.running) {
      const elapsed = Date.now() - this.startTime;
      this.display.textContent = this.formatTime(elapsed);
      requestAnimationFrame(() => this.updateDisplay());
    } else {
      this.display.textContent = this.formatTime(this.totalElapsed);
    }
  }

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

HTML部分

<div id="display">00:00:00</div>
<button id="startBtn">Start</button>
<button id="pauseBtn">Pause</button>
<button id="resetBtn">Reset</button>

初始化与事件绑定

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());

性能优化方案

使用requestAnimationFrame替代setInterval实现更流畅的动画效果。对于高精度需求,可用performance.now()替代Date.now(),其精度达到微秒级。

// 修改start方法中的时间获取方式
this.startTime = performance.now() - this.totalElapsed;

// 修改updateDisplay中的计算方式
const elapsed = performance.now() - this.startTime;

扩展功能

添加分段计时功能:

js实现秒表

class Stopwatch {
  // ...原有代码...
  addLap() {
    if (this.running) {
      const lapTime = Date.now() - this.startTime;
      console.log(`Lap: ${this.formatTime(lapTime)}`);
    }
  }
}

// 添加按钮事件
document.getElementById('lapBtn').addEventListener('click', () => stopwatch.addLap());

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

相关文章

css3结合js制作

css3结合js制作

CSS3 结合 JavaScript 制作动态效果 CSS3 和 JavaScript 结合可以实现丰富的动态效果,包括动画、交互和响应式设计。以下是几种常见的实现方式: CSS3 动画与 Java…

vue实现秒表

vue实现秒表

实现秒表功能 在Vue中实现秒表功能需要处理计时逻辑、显示格式以及控制按钮(开始、暂停、重置)。以下是具体实现步骤: 创建Vue组件 <template> <div class…

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: functio…