当前位置:首页 > JavaScript

js 实现计时器

2026-04-04 07:14:46JavaScript

js 实现计时器

使用 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:

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

主线程:

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

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

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

相关文章

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式系…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js实现选题

js实现选题

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