wux-weapp
Version:
一套组件化、可复用、易扩展的微信小程序 UI 组件库
42 lines (37 loc) • 996 B
JavaScript
export default function debounce(func, wait, immediate) {
let timeout,
args,
context,
timestamp,
result
const later = function later() {
const last = +(new Date()) - timestamp
if (last < wait && last >= 0) {
timeout = setTimeout(later, wait - last)
} else {
timeout = null
if (!immediate) {
result = func.apply(context, args)
if (!timeout) {
context = null
args = null
}
}
}
}
return function debounced() {
context = this
args = arguments
timestamp = +(new Date())
const callNow = immediate && !timeout
if (!timeout) {
timeout = setTimeout(later, wait)
}
if (callNow) {
result = func.apply(context, args)
context = null
args = null
}
return result
}
}