当前位置:首页 > JavaScript

js实现秒表

2026-02-01 06:00:51JavaScript

实现秒表功能

使用JavaScript实现秒表功能可以通过Date对象或performance.now()来精确计时,结合setInterval控制更新频率。以下是两种常见实现方式:

基于Date对象的秒表

let startTime;
let timerInterval;
let isRunning = false;

function startStopwatch() {
  if (isRunning) return;
  startTime = new Date().getTime();
  timerInterval = setInterval(updateDisplay, 10);
  isRunning = true;
}

function stopStopwatch() {
  clearInterval(timerInterval);
  isRunning = false;
}

function resetStopwatch() {
  stopStopwatch();
  document.getElementById("display").textContent = "00:00:00.000";
}

function updateDisplay() {
  const currentTime = new Date().getTime();
  const elapsedTime = currentTime - startTime;
  const formattedTime = formatTime(elapsedTime);
  document.getElementById("display").textContent = formattedTime;
}

function 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}`;
}

基于performance.now()的高精度秒表

let startTimestamp;
let accumulatedTime = 0;
let timerInterval;
let isRunning = false;

function startStopwatch() {
  if (isRunning) return;
  startTimestamp = performance.now();
  timerInterval = setInterval(updateDisplay, 10);
  isRunning = true;
}

function stopStopwatch() {
  if (!isRunning) return;
  accumulatedTime += performance.now() - startTimestamp;
  clearInterval(timerInterval);
  isRunning = false;
}

function resetStopwatch() {
  stopStopwatch();
  accumulatedTime = 0;
  document.getElementById("display").textContent = "00:00:00.000";
}

function updateDisplay() {
  const currentTime = isRunning 
    ? accumulatedTime + (performance.now() - startTimestamp)
    : accumulatedTime;
  const formattedTime = formatTime(currentTime);
  document.getElementById("display").textContent = formattedTime;
}

function formatTime(milliseconds) {
  const totalSeconds = Math.floor(milliseconds / 1000);
  const hours = Math.floor(totalSeconds / 3600).toString().padStart(2, '0');
  const minutes = Math.floor((totalSeconds % 3600) / 60).toString().padStart(2, '0');
  const seconds = (totalSeconds % 60).toString().padStart(2, '0');
  const ms = Math.floor(milliseconds % 1000).toString().padStart(3, '0');
  return `${hours}:${minutes}:${seconds}.${ms}`;
}

HTML结构示例

<div id="display">00:00:00.000</div>
<button onclick="startStopwatch()">Start</button>
<button onclick="stopStopwatch()">Stop</button>
<button onclick="resetStopwatch()">Reset</button>

关键点说明

performance.now()Date.now()提供更高精度的时间测量(微秒级),且不受系统时间调整影响。

定时器间隔设置为10ms(实际精度受浏览器限制),可根据需要调整为更小值(如1ms)或更大值(如100ms)。

使用padStart()方法确保时间格式始终为两位数/三位数显示,保持界面整齐。

累计时间处理允许暂停后继续计时,而不是每次都从零开始。

js实现秒表

两种实现都支持显示小时、分钟、秒和毫秒,可根据需求调整格式函数。

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

相关文章

css3结合js制作

css3结合js制作

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

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码 funct…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数:…

js实现路由

js实现路由

js实现路由的方法 在JavaScript中实现路由功能可以通过多种方式完成,以下是几种常见的方法: 使用原生JavaScript实现路由 通过监听window.onhashchange事件来实现基…

js图片轮播的实现

js图片轮播的实现

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

js实现弹框

js实现弹框

使用 alert 实现简单弹框 JavaScript 的 alert 方法可以直接显示一个简单的弹框,内容为纯文本: alert("这是一个简单的弹框"); 使用 confirm 实现确认弹框…