2009-05-04 5 views
1

Ich benutze das $ (window) .scroll(); um eine Funktion anzugeben, die aufgerufen werden soll, wenn der Benutzer zu weit oben oder unten scrollt.Problem beim Warten auf die Funktion wurde beendet, bevor sie erneut ausgeführt werden kann

Die Ausführung der Funktion dauert eine Sekunde, und wenn sie weiter scrollt, wird sie mehrere Male ausgeführt, bevor die erste sogar beendet ist.

Gibt es eine Möglichkeit, ich kann die Funktion starten lassen und dann die $ (window) .scroll() - Funktion, die es warten muss, bevor diese Funktion erneut ausführen?

Antwort

3

Sie könnten einen boolean gesetzt, dass Sie bereits Scroll-Position Überprüfung:

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

Sie müssten ein checkingPosition = false hinzufügen; nach // mach Sachen –

+0

vergessen Sie nicht, es wieder auf false zu ändern, wenn die Funktion ausgeführt wird –

1

ich so etwas tun würde Umfang Fragen/Verwirrung, indem die Daten in ein Objekt einkapseln ... in diesem zu vermeiden Fall das Objekt jQuery (auf dem Fensterelement):

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

... aber das ist nur meine Meinung.

Verwandte Themen