n
秒后,才执行此函数n
秒内再次触发此函数,那么重新以再次触发的时间开始重新延迟n秒后执行此函数 这样的函数 执行行为 叫做函数防抖。
监听设备窗口大小发生改变,只有停止改变后的200ms
执行handleResize
方法
window.addEventListener('resize', debounce(handleResize, 200));
监听表单填写,表达内容改变都去请求服务端数据,在每次表单执行输入停止的500ms
后,才发起请求
input.addEventListener('change', debounce(handleRequest, 500));
function debounce(event, delay) {
let timer = null;
return function (...args) { // ...args用来接受fun原有的参数,比如事件就是event对象
clearTimeout(timer); // 利用clearTimeout的特性,处理delay内,再此触发函数不做处理
timer = setTimeout(() => {
event.apply(this, args);
}, delay);
};
}
这样的函数 执行行为 叫做函数节流。
滚动事件,持续滚动,间隔200ms
执行
dom.addEventListener('scroll', throttle(handleScroll, 200));
鼠标滑动事件,一秒钟大概可以执行60
次。使用节流函数优化,200ms
执行一次。如果不做节流处理,可想而知浏览器压力有多大
dom.addEventListener('mousemove', throttle(handleMove, 200));
function throttle(fun, delay) {
let prev = Date.now();
return function(...args) { // ...args用来接受fun原有的参数,比如事件就是event对象
let now = Date.now();
if (now - prev >= delay) {
fun.apply(this, args);
prev = Date.now();
}
}
}
前端 · 2020年10月20日 · 被浏览 - 次