定义:函数防抖:时间n秒后触发,不管在这个时间段中执行多少次事件,该事件只针对最后一次触发使用场景:上拉刷新 scroll事件 resize事件 文本的输入验证
1-抖动
<button id="btn">函数防抖</button> <script> var btn = document.getElementById("btn"); btn.onclick = function(){ setTimeout(()=>{ console.log("loading"); timer = null; },500) } </script>
2-原生javascript-button实现防抖
<!-- 函数防抖:时间n秒后触发,不管在这个时间段中执行多少次时间,该事件只针对最后一次触发 --> <button id="btn">函数防抖</button> <script> var timer; var btn = document.getElementById("btn"); btn.onclick = function(){ if(timer){ clearTimeout(timer) } timer = setTimeout(()=>{ console.log("loading"); timer = null; },500) } </script>
input实现防抖
##input<input type="text" id="input"> <script> var timer; var input = document.getElementById("input"); input.addEventListener("keyup",()=>{ if(timer){ clearTimeout(timer) } timer = setTimeout(()=>{ console.log(input.value); timer = null; },500) }) </script>
3-封装函数防抖(闭包)
<input type="text" id="input"> <script> //使用 var input = document.getElementById("input"); input.addEventListener("keyup",debounce(function(){ console.log(this.value); })) //封装 // function debounce(fn,delay=500){ let timer = null; return function(){ console.log(this); if(timer){ clearTimeout(timer); } timer = setTimeout(()=>{ console.log(this) //改变this关键字指向 fn.apply(this); },delay); } } </script>