节流(throttle): 指连续触发事件的函数,在一定时间间隔内只执行一次。
function throttle(fn, delay) {
let timer = null;
return function() {
const self = this;
const args = arguments;
if (!timer) {
timer = setTimeout(function() {
timer = null;
fn.apply(self, args);
}, delay)
}
}
}
//使用
window.addEventListener('scroll', throttle(function() {
console.log('scroll')
}, 1000))
防抖(debounce): 如果在一定时间内再次触发,就会取消上一的操作,重新执行最新的操作。
function debounce(fn, delay) {
let timer = null;
return function() {
const self = this;
const args = arguments;
if (timer) {
clearTimeout(timer)
}
timer = setTimeout(function() {
fn.apply(self, args);
}, delay)
}
}
//使用
window.addEventListener('input', debounce(function() {
console.log('input')
}, 1000))