当前位置:首页 > JavaScript

js 实现计时器

2026-04-04 07:14:46JavaScript

使用 setTimeout 实现单次计时器

setTimeout(() => {
  console.log('计时结束');
}, 3000); // 3秒后执行

使用 setInterval 实现循环计时器

let counter = 0;
const timer = setInterval(() => {
  console.log(`已过去 ${++counter} 秒`);
  if (counter >= 5) {
    clearInterval(timer);
  }
}, 1000); // 每秒执行一次

高性能 requestAnimationFrame 计时器

let startTime = null;
function step(timestamp) {
  if (!startTime) startTime = timestamp;
  const elapsed = timestamp - startTime;
  if (elapsed < 3000) { // 运行3秒
    console.log(Math.floor(elapsed / 1000));
    window.requestAnimationFrame(step);
  }
}
window.requestAnimationFrame(step);

精确到毫秒的计时器实现

class PrecisionTimer {
  constructor(duration, callback) {
    this.start = performance.now();
    this.timer = setInterval(() => {
      const elapsed = performance.now() - this.start;
      callback(elapsed);
      if (elapsed >= duration) clearInterval(this.timer);
    }, 16); // 约60fps
  }
}

new PrecisionTimer(5000, (ms) => {
  console.log(`已过去 ${ms.toFixed(2)} 毫秒`);
});

暂停/恢复功能的计时器实现

class PausableTimer {
  constructor(interval, callback) {
    this.remaining = interval;
    this.timerId = null;
    this.start = null;
    this.callback = callback;
  }

  startTimer() {
    this.start = Date.now();
    this.timerId = setTimeout(this.callback, this.remaining);
  }

  pause() {
    clearTimeout(this.timerId);
    this.remaining -= Date.now() - this.start;
  }

  resume() {
    this.startTimer();
  }
}

使用 Web Worker 实现后台计时器

worker.js:

let interval;
self.onmessage = (e) => {
  if (e.data === 'start') {
    let counter = 0;
    interval = setInterval(() => {
      self.postMessage(++counter);
    }, 1000);
  } else if (e.data === 'stop') {
    clearInterval(interval);
  }
};

主线程:

js 实现计时器

const worker = new Worker('worker.js');
worker.onmessage = (e) => {
  console.log(`Worker计时: ${e.data}秒`);
};
worker.postMessage('start');

// 停止计时
// worker.postMessage('stop');

标签: 计时器js
分享给朋友:

相关文章

js实现文件下载

js实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url, f…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…

js节流实现

js节流实现

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

js实现图片

js实现图片

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