/** ***************************************** * Created by edonet@163.com * Created on 2020-01-16 14:50:19 ***************************************** */ 'use strict'; /** ***************************************** * 加载依赖 ***************************************** */ import { rAF } from './rAF'; /** ***************************************** * 设置计时器 ***************************************** */ function setTimer(delay: number | undefined, callback: () => void): () => void { // 创建帧延时 if (typeof delay === 'number') { let id = setTimeout(callback, delay || 0) as unknown as number; // 返回取消函数 return () => { if (id) { clearTimeout(id); id = 0; } }; } // 创建帧延时 return rAF(callback); } /** ***************************************** * 延时执行 ***************************************** */ function delay(callback: () => void): () => void; function delay(callback: () => void, time: number): () => void; function delay(time: number, callback: () => void): () => void; function delay(time: number | (() => void), callback?: unknown): () => void { // 重载函数 if (typeof time === 'function') { return setTimer(callback as number, time); } // 校验参数 if (typeof callback !== 'function') { throw new Error('`callback` expected a Function'); } // 设置延时 return setTimer(time, callback as () => void); } /** ***************************************** * 抛出模块 ***************************************** */ export { delay, setTimer };