function throttle(fn, interval) {
// 1. 用last记录上一次时间,初始化为0
let last = 0
return function () {
// 2. 保存this和参数
const context = this
const args = arguments
// 3. 记录当前时间,要转数字
const now = +new Date()
// 4. 如果时间差大于指定间隔,则用apply调用函数,同时重置上一次的时间
if (now - last >= interval) {
fn.apply(context, args)
last = now
}
}
}
function debounce(fn, delay) {
let timer = null
return function () {
// 2. 保存this和参数
const context = this
const args = arguments
// 3. 如果已经有定时器,清除重新再建一个
if(timer) {
clearTimeout(timer)
}
// 4. 设定新的定时器,记得timer置空
timer = setTimeout(()=>{
fn.apply(context,args)
timer = null
},delay)
}
}
// const betterScroll = throttle(() => {
// console.log('滚动了')
// }, 1000)
const betterScroll = debounce(() => {
console.log('滚动了')
}, 1000)
document.addEventListener('scroll', betterScroll)
body {
height: 2000px;
}
console