El problema de espera hasta que la función haya terminado de ejecutarse antes de que intente ejecutarse nuevamente
-
03-07-2019 - |
Pregunta
Estoy usando $ (window) .scroll (); para especificar una función a la que llamar cuando el usuario se desplaza demasiado cerca de la parte superior o inferior.
La función tarda un segundo en ejecutarse, y si continúan desplazándose, se ejecuta varias veces antes de que la primera haya terminado.
¿Hay alguna manera en que pueda dejar que la función comience a ejecutarse y luego decirle a la función $ (window) .scroll () que debe esperar antes de ejecutar esa función nuevamente?
Solución
Puede establecer un valor booleano que ya esté verificando posición de desplazamiento:
checkingPosition = false;
$window.scroll(function() {
if(checkingPosition) return;
checkingPosition = true;
//do stuff
checkingPosition = false;
});
Otros consejos
Haría algo como esto para evitar problemas de alcance / confusión al encapsular los datos en un objeto ... en este caso, el objeto jQuery (en el elemento de la ventana):
$(function() {
$(window).data('checking_scroll',false);
$(window).scroll(function() {
if($(this).scrollTop() >= 200 /* or whatever... */) {
if($(this).data('checking_scroll') === true) {
return false;
} else {
whatever_function();
}
}
});
});
function whatever_function() {
$(window).data('checking_scroll',true);
// do all your stuff...
$(window).data('checking_scroll',false);
}
... pero eso es solo yo.