// 节流函数1
function throttle (fn, interval) {
// last 上次触发回调的时间
let last = 0;
return function () {
let context = this
let args = arguments
let now = +new Date()
if (now - last >= interval) {
last = now
fn.apply(context, args)
}
}
}
// 节流函数2
function throttle1 (callback, delay) {
let flag = true
return function () {
let args = arguments
if (flag) {
flag = flase
setTimeout(function () {
callback.apply(this, args)
flag = true
}, delay)
}
}
}
// 防抖函数
function debounce (fn, delay) {
let timer = null
return function () {
let context = this
let args = arguments
if (timer) {
clearTimeout(timer)
}
timer = setTimeout(function () {
fn.apply(context, args)
}, delay)
}
}
// 用throttle 来优化debounce
function debounceNice(fn, delay) {
let last = 0, timer = null
return function () {
let context = this
let args = arguments
let now = +new Date()
if (now - last < delay) {
clearTimeout(timer)
timer = setTimeout(() => {
last = now
fn.apply(context, args)
}, delay)
} else {
last = now
fn.apply(context, args)
}
}
}