/**
* 防抖函数
* @param func 执行的函数
* @param delay 延迟时间
* @param immediate 是否立即触发
* @returns
*/
function debounce(func, delay, immediate) {
let timeout
return function() {
const context = this
const args = arguments
const later = () => {
timeout = null
if (!immediate) {
func.apply(context, args)
}
}
const callNow = immediate && !timeout
clearTimeout(timeout)
timeout = setTimeout(later, delay)
if (callNow) {
func.apply(context, args)
}
}
}
/**
* 节流函数
* @param func 执行的函数
* @param delay 延迟时间
* @param immediate 是否立即触发
* @returns
*/
function throttle(func, delay, immediate) {
let timer = null
let lastTime = 0
return function() {
const context = this
const args = arguments
const now = Date.now()
if (immediate && !lastTime) {
func.apply(context, args)
lastTime = now
} else {
clearTimeout(timer)
timer = setTimeout(() => {
if (!immediate) {
func.apply(context, args)
}
lastTime = Date.now()
}, delay - (now - lastTime))
}
}
}