Aqui está um exemplo simples: anti-vibração com base no tempo de entrada t:
function debounce(func, t) {
let timeoutId;
return function (...args) {
clearTimeout(timeoutId);
timeoutId = setTimeout(() => {
func.apply(this, args);
}, t);
};
}
Esta função recebe dois parâmetros: func
a função que precisa ser anti-vibração t
e o intervalo de tempo anti-vibração (em milissegundos).
Internamente, usamos uma variável timeoutId
para armazenar setTimeout
o valor de retorno de. Sempre que a função anti-vibração é chamada, primeiro limpamos o cronômetro anterior (se houver), depois criamos um novo cronômetro e executamos a função de entrada após um atraso de t milissegundos.
Usar esta função para debounce garante que apenas a última chamada será executada dentro do intervalo de tempo especificado e as chamadas anteriores serão canceladas.
Por exemplo, use debounce
a função para eliminar uma função de retorno de chamada:
function myCallback() {
console.log('Debounced callback');
}
const debouncedCallback = debounce(myCallback, 200);
// 调用防抖函数
debouncedCallback(); // 200ms 后输出 "Debounced callback"
debouncedCallback(); // 取消前一次调用,重新计时 200ms
debouncedCallback(); // 取消前一次调用,重新计时 200ms