Problema esperando til função terminar a execução antes de tentar executar novamente
-
03-07-2019 - |
Pergunta
Eu estou usando a (janela) .scroll $ (); para especificar uma função a ser chamada para quando o usuário rola muito perto da parte superior ou inferior.
A função leva um segundo para executar, e se eles continuam rolando, ele executa várias vezes antes que a primeira tem mesmo de terminar.
Existe alguma maneira eu posso deixar a função de iniciar a execução e, em seguida, dizer a função $ (janela) .scroll () que ele precisa esperar antes de executar essa função novamente?
Solução
Você pode definir um booleano que você já está verificando a posição de rolagem:
checkingPosition = false;
$window.scroll(function() {
if(checkingPosition) return;
checkingPosition = true;
//do stuff
checkingPosition = false;
});
Outras dicas
Eu faria algo assim para questões de escopo evitar / confusão encapsulando os dados em um objeto ... neste caso, o objeto jQuery (no elemento janela):
$(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);
}
... mas isso é só comigo.