当前位置:首页 > 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轮播图实现原理

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

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 c…

js实现菜单

js实现菜单

实现基本HTML结构 使用HTML创建菜单的基本框架,通常包含<ul>和<li>元素。示例结构如下: <ul id="menu"> <li><…

js实现按钮点击

js实现按钮点击

实现按钮点击的JavaScript方法 HTML按钮元素 在HTML中创建按钮元素,为其添加id或class以便JavaScript选择: <button id="myButton">点…