当前位置:首页 > JavaScript

js 实现定时

2026-02-02 10:46:22JavaScript

定时器基础实现

在JavaScript中,定时功能主要通过 setTimeoutsetInterval 两个内置函数实现。前者用于延迟执行一次代码,后者用于周期性重复执行代码。

setTimeout 示例:

// 延迟1秒后执行
setTimeout(() => {
  console.log('Delayed message');
}, 1000);

setInterval 示例:

js 实现定时

// 每秒重复执行
const intervalId = setInterval(() => {
  console.log('Repeating message');
}, 1000);

// 清除定时器
// clearInterval(intervalId);

精确时间控制方案

对于需要更高精度的时间控制,可以使用 performance.now() 配合递归的 setTimeout

function preciseTimer(callback, interval) {
  let expected = performance.now() + interval;
  const timeout = () => {
    const drift = performance.now() - expected;
    callback();
    expected += interval;
    setTimeout(timeout, Math.max(0, interval - drift));
  };
  setTimeout(timeout, interval);
}

preciseTimer(() => console.log('Precise tick'), 1000);

异步等待实现

ES6引入的 Promiseasync/await 可以优雅地实现延迟:

js 实现定时

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

async function timedAction() {
  console.log('Start');
  await delay(2000);
  console.log('After 2 seconds');
}

动画帧定时

对于需要与屏幕刷新率同步的动画场景,使用 requestAnimationFramesetInterval 更合适:

function animate() {
  // 动画逻辑
  console.log('Animating...');
  requestAnimationFrame(animate);
}
requestAnimationFrame(animate);

定时器管理

对于需要管理多个定时器的场景,建议使用对象存储定时器ID:

const timers = {
  main: null,
  secondary: null
};

function startTimers() {
  timers.main = setInterval(/*...*/, 1000);
  timers.secondary = setTimeout(/*...*/, 5000);
}

function clearAllTimers() {
  Object.values(timers).forEach(id => {
    if(id) clearInterval(id);
  });
}

标签: js
分享给朋友:

相关文章

js实现类

js实现类

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

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。…

js实现防洪

js实现防洪

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

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…

js实现下拉刷新

js实现下拉刷新

监听触摸事件 通过监听 touchstart、touchmove 和 touchend 事件来检测用户下拉手势。记录触摸起始位置和移动距离。 let startY = 0; let currentY…

js实现排序

js实现排序

数组排序方法 JavaScript提供了内置的sort()方法用于数组排序。默认情况下,sort()将元素转换为字符串并按照Unicode码点排序。对于数字排序,需传入比较函数。 const num…