防抖的本质就是将几秒内触发的事件,统一变成最后触发的事件。也可以说就是定时器的维护,一旦在定时器设置的时间内触发相同事件便重置定时器。
// 包装事件的 todo 函数 function todo (func, delay) { // 定义一个timer let timer = null // 返回一个函数,在函数中调用需要触发的func return function () { // 通过 this 和 arguments 获取函数的作用域和变量, arguments[0] = func , arguments[1] = delay let _this = this let argsArray = arguments clearTimeout(timer) timer = setTimeout(()=>{ func.apply(_this, argsArray) }, delay) } } // 当用户滚时候调用的函数 function handleScroll () { console.log('I am scrolling') } let el = document.getElementById('container') el.addEventListener('scroll', todo(handleScroll, 3000))
搬运自GitHub