当前位置:首页 > JavaScript

js 实现定时

2026-04-07 04:16:44JavaScript

定时器基础实现

JavaScript 提供了两种原生定时器方法:

  • setTimeout(func, delay):在指定延迟后执行一次函数
  • setInterval(func, delay):每隔指定时间重复执行函数
// 一次性定时器
const timeoutId = setTimeout(() => {
  console.log('这段代码将在3秒后执行');
}, 3000);

// 周期性定时器
const intervalId = setInterval(() => {
  console.log('这段代码每2秒执行一次');
}, 2000);

清除定时器

使用对应的清除方法可以取消定时器:

js 实现定时

clearTimeout(timeoutId);  // 取消setTimeout
clearInterval(intervalId); // 取消setInterval

精确控制方案

对于需要更精确控制的场景,可以使用 requestAnimationFrame

js 实现定时

let startTime;
function animate(timestamp) {
  if (!startTime) startTime = timestamp;
  const elapsed = timestamp - startTime;

  if (elapsed < 2000) { // 2秒内执行动画
    console.log('动画执行中...');
    requestAnimationFrame(animate);
  }
}
requestAnimationFrame(animate);

现代API方案

使用 ES6 的 Promiseasync/await 实现更优雅的定时控制:

function delay(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

async function timedOperation() {
  console.log('开始');
  await delay(1000);
  console.log('1秒后执行');
}

高级定时管理

对于需要管理多个定时器的复杂场景,可以创建定时器管理器:

class TimerManager {
  constructor() {
    this.timers = new Map();
  }

  set(id, callback, delay) {
    this.clear(id);
    this.timers.set(id, setTimeout(() => {
      callback();
      this.timers.delete(id);
    }, delay));
  }

  clear(id) {
    if (this.timers.has(id)) {
      clearTimeout(this.timers.get(id));
      this.timers.delete(id);
    }
  }
}

// 使用示例
const manager = new TimerManager();
manager.set('timer1', () => console.log('定时器1触发'), 1000);

注意事项

  • 定时器的延迟时间不保证精确,会受到浏览器事件循环影响
  • 避免在单页应用切换时产生内存泄漏,记得清除不需要的定时器
  • 长时间运行的定时器可能导致页面性能下降

标签: js
分享给朋友:

相关文章

js实现轮播图

js实现轮播图

基础轮播图实现 使用HTML、CSS和JavaScript实现一个简单的自动轮播图。HTML结构包含一个容器和多个图片项。 <div class="slider"> <div…

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js 实现倒计时

js 实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是两种常见实现方式。 使用 setInterval 实…

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…

jquery.js

jquery.js

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

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 /…