JS定时任务封装(支持精确倒计时)

编程入门 行业动态 更新时间:2024-10-23 12:31:45

JS定时任务封装(支持精确<a href=https://www.elefans.com/category/jswz/34/1769463.html style=倒计时)"/>

JS定时任务封装(支持精确倒计时)

/**** callback 定时任务回调函数,* time 任务执行的间隔时间,* config.accurate 是否是精准的定时任务,如果是,会自动修正定时器偏差。*/
export default function (callback: () => void, time: number, config?: {accurate: boolean // 是否是精准的定时任务,如果是,会自动修正定时器偏差。}
) {let task: any = nullconst record = {startTime: 0,runTime: 0,offsetTime: 0}const run = () => {if (config?.accurate) {record.startTime = new Date().getTime()}task = setTimeout(() => {if (config?.accurate) {record.runTime = new Date().getTime()record.offsetTime = time - (record.runTime - record.startTime)} else {record.offsetTime = 0}// 必须先run,再执行callback,防止在callback中调用clearTask方法run()callback()}, time + record.offsetTime)}/*** 清除定时任务*/const clearTask = () => {clearTimeout(task)task = null}/*** 启动定时任务* @param immediate 是否立即运行*/const startTask = (immediate?: boolean) => {if (immediate) {callback()}clearTask()run();}return {clearTask,startTask}
}

使用、控制都很方便:

// 初始化
const { clearTask, startTask } = useInterval(() => {// do something....}, 1000)// 启动
startTask()// 清除
clearTask()//重新启动
clearTask()
startTask()

更多推荐

JS定时任务封装(支持精确倒计时)

本文发布于:2023-12-02 00:07:30,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1651745.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:倒计时   精确   JS

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!