什么是防抖和节流?有什么区别?如何实现?
节流函数(每调用一次后在规定的时间 wait 内不可再次调用)
function throttle(callback,wait){
let last = Date.now();
return function(...args){
if((Date.now() - last) > wait){
callback.call(this,...args);
last = Date.now();
}
}
}
- 鼠标的点击事件,比如
mousedown
只触发一次 - 监听滚动事件,比如是否滑到底部自动加载更多,用 throttle 判断
- 比如游戏中发射子弹的频率(1 秒发射一颗)
防抖函数(在事件被触发 n 秒后再执行回调,如果在这 n 秒内又被触发,则重新计时)
function debounce(callback, delay){
let timer = null;
return function(...args){
if(timer) clearTimeout(timer);
timer = setTimeout(function(){
callback.apply(this, args);
},delay)
}
}
- search 搜索,用户不断输入值时,用防抖来节约 Ajax 请求,也就是输入框事件 。
- window 触发 resize 时,不断的调整浏览器窗口大小会不断的触发这个事件,用防抖来让其只触发一次
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论