46 lines
1.0 KiB
JavaScript
46 lines
1.0 KiB
JavaScript
/**
|
||
* @param {Function} fn 需要执行的方法,因this指向问题,建议不使用箭头函数,
|
||
* @param {Number} delay 间隔时间,默认值100
|
||
* @param {Boolean} promptly 是否立即执行,默认false
|
||
* **/
|
||
export const debounce = (fn, delay = 100, promptly) => {
|
||
let timer = null
|
||
return function (...args) {
|
||
// 立即执行
|
||
if (promptly) {
|
||
// 当timer为null时执行
|
||
if (!timer) fn.apply(this, args)
|
||
if (timer) {
|
||
clearTimeout(timer)
|
||
}
|
||
timer = setTimeout(() => {
|
||
timer = null
|
||
}, delay)
|
||
} else {
|
||
if (timer) {
|
||
clearTimeout(timer)
|
||
}
|
||
timer = setTimeout(() => {
|
||
fn.apply(this, args)
|
||
}, delay)
|
||
}
|
||
}
|
||
}
|
||
/**
|
||
* @param {Function} fn 需要执行的方法,因this指向问题,建议不使用箭头函数,
|
||
* @param {Number} delay 间隔时间,默认值100
|
||
* **/
|
||
const throttle = (fn, delay = 100) => {
|
||
let valid = true
|
||
return function (...args) {
|
||
if (!valid) {
|
||
return
|
||
}
|
||
valid = false
|
||
fn.apply(this, args)
|
||
setTimeout(() => {
|
||
valid = true
|
||
}, delay)
|
||
}
|
||
}
|