当前位置:首页 > 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);

清除定时器

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

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

精确控制方案

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

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秒后执行');
}

高级定时管理

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

js 实现定时

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实现倒计时

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

vue.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swipe…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 c…

js实现跑马灯

js实现跑马灯

实现跑马灯效果 使用HTML和JavaScript可以轻松实现跑马灯效果。以下是两种常见的实现方式: HTML结构 <div id="marquee"> <span>…

js实现搜索

js实现搜索

实现搜索功能的方法 在JavaScript中实现搜索功能可以通过多种方式完成,以下是几种常见的实现方法。 使用数组的filter方法 通过数组的filter方法可以筛选出符合条件的数据项。假设有一个…