El problema de espera hasta que la función haya terminado de ejecutarse antes de que intente ejecutarse nuevamente

StackOverflow https://stackoverflow.com/questions/822653

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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top