/** * 防抖 * 高频事件触发调用,高频(小于delay)事件停止后,只触发最后一次事件,在delay时间后执行调用业务 */ export function debounce(fn, delay, node) { let timer = null return function() { if (timer) { // 清除当前定时器,若当前定时器没有足够的delay时间,还未来得及执行,则被清除后,不再执行fn,若当前定时器有足够的delay时间,则去执行fn,清不清除无所谓 clearTimeout(timer) // 创建新的定时器 timer = setTimeout(() => { node[fn]() }, delay) } else { // 创建新的定时器 timer = setTimeout(() => { node[fn]() }, delay) } } } /** * 节流 * 高频事件触发调用,只要高频(小于delay)事件不停止,则每隔一段delay时间,都会执行调用业务 */ export function throttle(fn, delay) { let valid = true return function() { if (!valid) { // 休息时间 暂不接客 return false } // 工作时间,执行函数并且在间隔期内把状态位设为无效 valid = false setTimeout(() => { this[fn]() valid = true }, delay) } }