倒计时)"/>
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定时任务封装(支持精确倒计时)
发布评论