26 lines
629 B
JavaScript
26 lines
629 B
JavaScript
|
|
/**
|
|||
|
|
* 防抖函数
|
|||
|
|
* @param {Function} fn 需要防抖的函数
|
|||
|
|
* @param {Number} delay 延迟时间,单位毫秒
|
|||
|
|
* @param {Boolean} immediate 是否立即执行
|
|||
|
|
* @returns {Function} 返回防抖处理后的函数
|
|||
|
|
*/
|
|||
|
|
export function debounce(fn, delay = 500, immediate = false) {
|
|||
|
|
let timer = null
|
|||
|
|
let isInvoke = false
|
|||
|
|
|
|||
|
|
return function(...args) {
|
|||
|
|
if (timer) clearTimeout(timer)
|
|||
|
|
|
|||
|
|
if (immediate && !isInvoke) {
|
|||
|
|
fn.apply(this, args)
|
|||
|
|
isInvoke = true
|
|||
|
|
} else {
|
|||
|
|
timer = setTimeout(() => {
|
|||
|
|
fn.apply(this, args)
|
|||
|
|
isInvoke = false
|
|||
|
|
timer = null
|
|||
|
|
}, delay)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|