首先要明确防抖和节流的概念和出现的背景:
1、两者的作用其实都是为了限制一些触发事件对应的回调函数的执行次数,一般都是一些持续触发行为,比如mousemove resize scroll
2、防抖:将一段时间内的多次事件触发转化为只响应最后一次触发,事件被触发n秒后再执行回调,在n秒内再次触发会重新开始计时(注意:第一次触发不能延迟执行);
防抖的关键在于如果你一直点一个按钮,那这个点击事件的回调函数除了第一次,以后永远不会触发
节流:减少一段时间内触发的频率,规定用户的行为在某个时间段只执行一次
节流的关键在于你点一个按钮,不管你点多少次,设定2秒触发一次就会隔2s触发对应点击事件的回调函数
其次需要知道两者的应用场景和使用之后的好处:
好处:提高用户体验,减轻后台压力
防抖应用场景举例:
1、按钮多次点击做表单提交(用防抖防止表单多次频繁提交)
btn.addEventListener(‘click’, debounce(submit, 5000), false);
function submit(a) {
console.log(‘提交表单’);
console.log(this);
}
2、input输入框的格式验证
节流应用场景举例:
1、动画相关场景,对resize touchmove mousemove scroll等触发的频繁度更高的事件会强制固定速率运行
2、对输入框做模糊搜索的时候可以等3-5个字符输入后再显示全部搜索的关键字,而不是输入一个就全部显示出来
function debounce(fn, time) {
let timer = null;
return function