什么是 debounce
n. 防反跳
按键防反跳(Debounce)为什么要去抖动呢?机械按键在按下时,并非按下就接触的很好,尤其是有簧片的机械开关,会在接触的瞬间反复的开合多次,直到开关状态完全改变。大学时候做过电子实验的都知道,按键的时候需要加上消抖函数.
debounce 的使用场景
- 调整页面宽度 ,resize 时,避免频繁渲染导致页面卡顿
- 输入框输入搜索🔍条件,为了优化体验,没有设置搜索按钮,但是尽量减少 api 调用
- …
JavaScript 实现 debounce
JavaScript 实现 debounce 利用了闭包的概念.
1 | function debounce(fn, wait) { |
上面的函数接收一个函数和一个延时秒数.
其中let timeout = null;
只有在第一次调用 debounce 函数时定义.
实现如果没有计时器,则新建一个计时器.已经存在计时器的情况下,会销毁当前存在的计时器,并重新创建一个计时器.
这样就可以达到消抖的效果.例如,用户在输入框进行输入时,设置了一个 1000ms 的延时函数,那么在用户输入完毕以后才会像后端发起查询请求,可以减少大量的网路请求.
debounce 在 vue 中的使用
1 | //utils.js |
1 | // app.vue |