mrr.sj.front/utils/debounce.js

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)
}
}
}