Problème en attente jusqu'à ce que la fonction ait fini de s'exécuter avant de tenter de s'exécuter à nouveau

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

Question

J'utilise la $ (fenêtre) .scroll (); pour spécifier une fonction à appeler lorsque l'utilisateur fait défiler trop près du haut ou du bas.

La fonction prend une seconde pour s'exécuter et si elle continue à défiler, elle s'exécute plusieurs fois avant la fin de la première.

Existe-t-il un moyen quelconque de laisser la fonction commencer à s'exécuter, puis indiquer à la fonction $ (window) .scroll () qu'elle doit attendre avant de l'exécuter à nouveau?

Était-ce utile?

La solution

Vous pouvez définir un booléen sur lequel vous vérifiez déjà la position du défilement:

checkingPosition = false;
$window.scroll(function() {
   if(checkingPosition) return;
   checkingPosition = true;
   //do stuff
   checkingPosition = false;
});

Autres conseils

Je ferais quelque chose comme ceci pour éviter les problèmes de portée / la confusion en encapsulant les données dans un objet ... dans ce cas, l'objet jQuery (sur l'élément window):

$(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);
}

... mais c'est juste moi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top