返回

防抖:让你的代码不再抖动

前端

防抖:让你的代码不再抖动

防抖是一种技术,可以防止在短时间内多次触发同一事件的回调函数。这对于防止不必要的计算或网络请求很有用。例如,如果你有一个搜索框,并且你希望在用户输入时实时更新结果,那么使用防抖可以防止用户每次按键都触发一次搜索请求。


防抖的实现方式

防抖的实现方式分两种:“立即执行”和“非立即执行”。区别在于第一次触发时,是否立即执行回调函数。


立即执行

立即执行的防抖函数会在第一次触发时立即执行回调函数,然后在接下来的时间内,如果回调函数再次被触发,则会重置定时器。这样可以保证回调函数只在第一次触发时立即执行,后面的触发都会被忽略。


非立即执行

非立即执行的防抖函数会在第一次触发时设置一个定时器,然后在定时器到期后执行回调函数。如果在定时器到期之前,回调函数再次被触发,则会重置定时器。这样可以保证回调函数只在最后一次触发后执行一次。


防抖函数的实现

这里提供了一个使用JavaScript实现的防抖函数:


```javascript function debounce(func, wait, immediate) { let timeout; return function (...args) { const context = this; const later = function () { timeout = null; if (!immediate) func.apply(context, args); }; const callNow = immediate && !timeout; clearTimeout(timeout); timeout = setTimeout(later, wait); if (callNow) func.apply(context, args); }; } ```

这个函数接收三个参数:要防抖的函数、防抖的等待时间以及是否立即执行。如果立即执行为true,则会在第一次触发时立即执行回调函数,否则会在最后一次触发后执行一次。


防抖的应用场景

防抖技术可以应用于各种场景,包括:


  • 搜索框:防止用户每次按键都触发一次搜索请求。
  • 滚动事件:防止用户在滚动页面时不断触发滚动事件。
  • 窗口调整事件:防止用户在调整窗口大小时不断触发窗口调整事件。
  • 鼠标移动事件:防止用户在移动鼠标时不断触发鼠标移动事件。
  • 点击事件:防止用户在短时间内多次点击同一个元素。

结语

防抖是一种非常有用的技术,可以防止不必要的计算或网络请求,从而提高应用程序的性能和用户体验。希望本文对您有所帮助,如果您有其他问题,请随时与我联系。