当前位置:首页 > JavaScript

js实现计时

2026-04-07 02:43:14JavaScript

使用 setInterval 实现计时器

通过 setInterval 可以创建一个周期性执行的计时器,适合需要持续更新的场景。以下代码实现一个从 0 开始递增的计时器:

let seconds = 0;
const timer = setInterval(() => {
  seconds++;
  console.log(`已计时: ${seconds} 秒`);
}, 1000);

// 停止计时(示例:10秒后停止)
setTimeout(() => {
  clearInterval(timer);
  console.log("计时结束");
}, 10000);

使用 setTimeout 递归实现计时器

递归调用 setTimeout 可以避免 setInterval 的潜在误差累积问题,适合需要高精度计时的场景:

js实现计时

let seconds = 0;
function startTimer() {
  setTimeout(() => {
    seconds++;
    console.log(`已计时: ${seconds} 秒`);
    startTimer(); // 递归调用
  }, 1000);
}
startTimer();

显示格式化的时间(HH:MM:SS)

将秒数转换为易读的时分秒格式:

js实现计时

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

let seconds = 0;
setInterval(() => {
  seconds++;
  console.log(`当前时间: ${formatTime(seconds)}`);
}, 1000);

性能优化的 requestAnimationFrame 计时器

适用于需要与屏幕刷新率同步的高性能计时场景(如动画):

let startTime = performance.now();
function updateTimer(timestamp) {
  const elapsed = Math.floor((timestamp - startTime) / 1000);
  console.log(`精确计时: ${elapsed} 秒`);
  requestAnimationFrame(updateTimer);
}
requestAnimationFrame(updateTimer);

暂停与恢复功能实现

扩展基础计时器,增加暂停和恢复功能:

let seconds = 0;
let timer;
let isRunning = false;

function start() {
  if (!isRunning) {
    isRunning = true;
    timer = setInterval(() => {
      seconds++;
      console.log(`计时中: ${seconds} 秒`);
    }, 1000);
  }
}

function pause() {
  clearInterval(timer);
  isRunning = false;
}

// 使用示例
start();
setTimeout(pause, 5000); // 5秒后暂停
setTimeout(start, 8000); // 8秒后恢复

注意事项

  1. 浏览器环境下,页面切换可能导致 setInterval/setTimeout 延迟执行
  2. clearIntervalclearTimeout 需传入正确的计时器ID
  3. 长时间运行的计时器可能导致内存泄漏,需在页面卸载时清理

标签: js
分享给朋友:

相关文章

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…

js如何实现继承

js如何实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例能够访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

jquery.js

jquery.js

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互等操作。以下是关于 jQuery.js 的核心信息和使用方法: 获…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…