Problème en attente jusqu'à ce que la fonction ait fini de s'exécuter avant de tenter de s'exécuter à nouveau
-
03-07-2019 - |
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?
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.