43 lines
1.3 KiB
TypeScript
43 lines
1.3 KiB
TypeScript
/**
|
|
* 防抖函数
|
|
* @param {Function} func - 需要防抖的函数
|
|
* @param {number} wait - 时间间隔(毫秒)
|
|
* @returns {Function} - 返回一个防抖后的函数
|
|
*/
|
|
export function debounce(func, wait): (...args: any[]) => void {
|
|
let timer: NodeJS.Timeout | null = null;
|
|
return function(){
|
|
if (timer) {
|
|
clearTimeout(timer);
|
|
}
|
|
timer = setTimeout(() => {
|
|
func(...arguments)
|
|
}, wait);
|
|
};
|
|
}
|
|
|
|
/**
|
|
* 节流函数
|
|
* @param {Function} func - 需要节流的函数
|
|
* @param {number} wait - 时间间隔(毫秒),表示在这个时间间隔内最多执行一次函数
|
|
* @returns {Function} - 返回一个节流后的函数
|
|
*/
|
|
export function throttle(func, wait:number):(...args: any[]) => void {
|
|
// 上一次执行函数的时间戳,初始值为 0
|
|
let lastTime = 0;
|
|
|
|
// 返回一个闭包函数,作为节流后的函数
|
|
return function () {
|
|
// 获取当前时间戳
|
|
const now = Date.now();
|
|
|
|
// 如果当前时间与上一次执行时间的差值大于等于 wait,则执行函数
|
|
if (now - lastTime >= wait) {
|
|
// 更新上一次执行函数的时间戳
|
|
lastTime = now;
|
|
// 调用原始函数,并传入参数
|
|
func(...arguments);
|
|
}
|
|
};
|
|
}
|