简介
1.防抖
操作停止后间隔一定时间执行
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| function debounce(method,delay) { let timer = null return function () { console.error(arguments) if(timer) { clearTimeout(timer) timer = null } timer = setTimeout(() => { method.call(this, arguments) }, delay); } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| function d(fn, wait, immediate) { let timer = null return function () { if(timer) clearTimeout(timer) if(immediate) { let callNow = !timer timer = setTimeout(() => { timer = null }, wait) if(callNow) fn.call(this, arguments) }else { timer = setTimeout(() => { fn.call(this, arguments) }, wait) } } } function fn(v) { console.log(v); } window.onscroll = d(fn, 2000, true)
|
2.节流
持续触发但不会执行和触发次数一样的次数,每间隔一定时间执行一次,减少了执行的频率
1 2 3 4 5 6 7 8 9 10 11 12
| function throttle(method,delay){ let timer = null return function () { if(!timer) { timer = setTimeout(() => { method() clearTimeout(timer) timer = null }, delay); } } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| function t(fn, wait) { let time = new Date().getTime() return function () { let now = new Date().getTime() if(now - time >= wait) { fn.call(this, arguments) time = now } } } function fn(v) { console.log(v) } window.onscroll = t(fn, 1000)
|