Aquí hay un ejemplo simple: antivibración basado en el tiempo de entrada t:
function debounce(func, t) {
let timeoutId;
return function (...args) {
clearTimeout(timeoutId);
timeoutId = setTimeout(() => {
func.apply(this, args);
}, t);
};
}
Esta función recibe dos parámetros: func
la función que debe ser antivibración t
y el intervalo de tiempo antivibración (en milisegundos).
Internamente, utilizamos una variable timeoutId
para almacenar setTimeout
el valor de retorno de. Siempre que se llama a la función anti-vibración, primero borramos el temporizador anterior (si lo hay), luego creamos un nuevo temporizador y ejecutamos la función entrante después de un retraso de t milisegundos.
El uso de esta función para evitar rebotes garantiza que solo se ejecutará la última llamada dentro del intervalo de tiempo especificado y que se cancelarán las llamadas anteriores.
Por ejemplo, use debounce
la función para rechazar una función de devolución de llamada:
function myCallback() {
console.log('Debounced callback');
}
const debouncedCallback = debounce(myCallback, 200);
// 调用防抖函数
debouncedCallback(); // 200ms 后输出 "Debounced callback"
debouncedCallback(); // 取消前一次调用,重新计时 200ms
debouncedCallback(); // 取消前一次调用,重新计时 200ms