acelerador
El acelerador del que estamos hablando aquí significa estrangulamiento de la función. En pocas palabras, el controlador de frecuencia de las llamadas de funciones es realizar continuamente el control de intervalo de tiempo. Escenarios de la aplicación principal como:
1. Evento de movimiento del mouse
2. Posicionamiento dinámico de los elementos DOM, cambiar el tamaño y desplazar los eventos de los objetos de la ventana
Algunas personas comparan vívidamente el incidente mencionado anteriormente con el estremecimiento de una ametralladora. El acelerador es el gatillo de la ametralladora. Si no pone el gatillo, seguirá disparando. Lo mismo es cierto para los eventos anteriores que utilizamos durante el desarrollo. Si no suelta el mouse, sus eventos siempre se activarán. Por ejemplo:
La copia del código es la siguiente:
var resizetimer = null;
$ (ventana) .on ('cambiar', function () {
if (resizetimer) {
ClearTimeOut (resizetimer)
}
resizetImer = setTimeOut (function () {
console.log ("Window Redize");
}, 400);
Debilitar
El debilidad es muy similar al acelerador. El debaldad es un método que se ejecutará cuando el tiempo libre debe ser mayor o igual a un cierto valor. El debaldad es el control de intervalos del tiempo libre. Por ejemplo, cuando realizamos autocompletos, necesitamos controlar el intervalo de tiempo de llamar al método al ingresar el texto. En general, el primer carácter de entrada comienza a llamar de inmediato, y el método ejecutado se llama repetidamente de acuerdo con un cierto intervalo de tiempo. Es particularmente útil para entradas anormales, como mantener presionada una cierta y no ponerlo.
Los principales escenarios de la aplicación del debilidad son:
Evento de tecla de entrada de texto, evento de clave, por ejemplo, autocompletar
Existen muchos métodos para este tipo de en línea, como un guión bajo, JS encapsula el acelerador y el debaldad. JQuery también tiene un complemento para Throttle and Leapote: JQuery Throttle/Debunce. Todos los principios son los mismos y se implementan las mismas funciones. Aquí hay otra función de control del acelerador y de debuncia que he estado usando nuevamente:
La copia del código es la siguiente:
/*
* Cuando la función de retorno de control de frecuencia se llama continuamente, la frecuencia de ejecución de FN se limita a cuántas veces se ejecuta cada vez
* @param fn {function} funciones que deben llamarse
* @param demora {número} Tiempo de retraso en milisegundos
* @param inmediato {bool} Pase falso al parámetro inmediato La función unida se ejecuta primero, en lugar de retrasarse y luego ejecutar.
* @return {function} en realidad llamar a la función
*/
Var Throttle = Function (Fn, Delay, Inmediatamente, Desbloqueo) {
var curr = +new Date (), // Evento actual
last_call = 0,
last_exec = 0,
temporizador = nulo,
diferencia, // diferencia de tiempo
contexto, // contexto
Args,
ejecut = function () {
last_Exec = Curr;
fn.apply (contexto, args);
};
Función de retorno () {
curr = +nueva fecha ();
contexto = esto,
args = argumentos,
diff = Curr - (¿Debuncia? Last_Call: last_exec) - retraso;
ClearTimeOut (temporizador);
if (debuncia) {
if (inmediato) {
Timer = setTimeOut (ejecutivo, retraso);
} else if (diff> = 0) {
exec ();
}
} demás {
if (diff> = 0) {
exec ();
} else if (inmediato) {
timer = setTimeOut (exec, -diff);
}
}
last_call = Curr;
}
};
/*
* Cuando la función de retorno de control inactivo se llama continuamente, el tiempo de inactividad debe ser mayor o igual a la demora antes de que se ejecute FN.
* @param fn {function} la función a llamar
* @param demora {número} tiempo libre
* @param inmediato {bool} Pase falso al parámetro inmediato La función unida se ejecuta primero, en lugar de retrasarse y luego ejecutar.
* @return {function} en realidad llamar a la función
*/
VAR DEBOUNT = FUNTION (FN, Delay, Inmediatamente) {
retorno acelerador (fn, retraso, inmediato, verdadero);