vue 环境下多个定时器的创建与暂停的统一封装

你也许遇到过这样的需求 有一个页面有多个展示内容(大屏页面),每个展示内容需要定时刷新,并且每个展示内容需要不同的刷新时间。 这个时候你就需要弄很多变量来控制定时器,然后切换出去页面的时候还要取消定时器,简直就是噩梦了。 所以我就写了这个定时器管理器,你只需要传入一个对象,对象中包含定时器名称,定时器回调函数,定时器间隔,就可以自动管理定时器了。

javascript 复制代码
export const useTimers = () => {
  // 存储所有定时器
  const timers = {};
  /**
   * 创建并启动定时器
   * @param {string} key - 定时器名称,用于后续管理
   * @param {Function} callback - 定时执行的回调函数
   * @param {number} interval - 执行间隔(毫秒)
   * @returns {number} 定时器ID
   */
  const startInterval = (key, callback, interval) => {
    // 先清除同名定时器,避免重复
    if (timers[key]) clearInterval(timers[key]);
    // 立即执行一次
    callback();
    // 创建新定时器
    timers[key] = setInterval(callback, interval);
    return timers[key];
  };

  /**
   * 停止并清除定时器
   * @param {string} [key] - 定时器名称,不传则清除所有定时器
   */
  const stopInterval = (key) => {
    if (key) {
      // 清除指定定时器
      if (timers[key]) {
        clearInterval(timers[key]);
        timers[key] = null;
      }
    } else {
      // 清除所有定时器
      Object.keys(timers).forEach((k) => {
        if (timers[k]) {
          clearInterval(timers[k]);
          timers[k] = null;
        }
      });
    }
  };

  // 组件卸载时自动清理所有定时器
  onBeforeUnmount(() => stopInterval());
  // 如使用keep-alive,组件失活时也清理定时器
  onDeactivated(() => stopInterval());

  return { startInterval, stopInterval, timers };
};

使用示例

javascript 复制代码
const user = {
    userList: {
        backFun: getuserList,
        time: 10000
    },
    userInfo: {
        backFun: getuserInfo,
        time: 5000
    }
}

import { useTimers } from './timeConfig';
const { startInterval, stopInterval } = useTimers();
const getuserList = () => {
    return []
}
const getuserInfo = () => {
    return {}
}

onMounted(() => {
    Object.keys(user).forEach(key => {
        startInterval(key, user[key].backFun, user[key].time);
    });
})
相关推荐
苏打水com14 小时前
第十九篇:Day55-57 前端工程化进阶——从“手动低效”到“工程化高效”(对标职场“规模化”需求)
前端·css·vue·html
小六*^____^*14 小时前
虚拟列表学习
前端·javascript·学习
JIngJaneIL14 小时前
基于java+ vue学生选课系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
十月不到底14 小时前
vue3手机端列表加载组件
前端·vue
小周同学:14 小时前
vue2 +driver 实现页面导航提示引导
vue.js
岁月宁静14 小时前
LangGraph 技术详解:基于图结构的 AI 工作流与多智能体编排框架
前端·python·langchain
岁月宁静14 小时前
LangChain 技术栈全解析:从模型编排到 RAG 实战
前端·python·langchain
1024肥宅15 小时前
工程化工具类:实现高效的工具函数库
前端·javascript·面试
Nick_zcy15 小时前
基于Vue和Python的羽毛球拍智能推荐系统, 从“不会选羽毛球拍”到“选对拍”的一站式小工具
前端·vue.js·python·算法·推荐算法
invicinble15 小时前
关于对前端项目(架子级别)的理解和认识
前端