2013-05-28 12 views
6

Mam następujący funkcja jQuery, która wyzwala aTestEvent() gdy użytkownik przewija poziomo obok 500 pikseli:jQuery - Scroll Funkcja Utrzymuje Wyzwalanie: Tylko raz proszę

jQuery(document).scroll(function(){ 
    if(jQuery(this).scrollLeft() >= 500){ 
      aTestEvent(); 
}}); 

Oto problem: chcę tylko aTestEvent() być wyzwalany raz ! Jednak za każdym razem, gdy użytkownik przewinie z powrotem na początek strony, a następnie ponownie za 500 pikseli, zostanie ponownie uruchomiony aTestEvent().

W jaki sposób możemy zmienić powyższy kod, aby wyzwalacz pojawił się tylko po raz pierwszy użytkownik przewija przez 500 pikseli?

Odpowiedz

14

Można użyć on i off metody:

$(document).on('scroll', function() { 
    if($(this).scrollLeft() >= 500) { 
     $(document).off('scroll'); 
     aTestEvent(); 
    } 
}); 

http://jsfiddle.net/3kacd/

Uwaga: Ten fragment kodu może dostępnych „off” wszystkie zdarzenia przewijania na danej stronie, ale przewijać się tylko przeznaczony zwój obsługa bez przeszkadzania innym programom obsługi przewijania, możemy użyć przestrzeni nazw. Przestrzenie nazw są podobne do klas CSS, ponieważ nie są hierarchiczne; tylko jedna nazwa musi pasować.

$(document).on('name1.scroll', function() { 
    if($(this).scrollLeft() >= 500) { 
     $(document).off('name1.scroll'); 
     aTestEvent(); 
    } 
}); 

http://jsfiddle.net/shekhardtu/3kacd/57/

+0

To załatwia sprawę! Dziękuję Ci bardzo. Przyjmę, gdy tylko będę mógł. – tehSUPERADMIN

+0

@tehSUPERADMIN Nie ma za co. – undefined

+0

Inną poręczną sztuczką jest mniej znana metoda .one(). http://api.jquery.com/one/ Bardzo przydatne co jakiś czas, ale nie działałoby to technicznie z powodu instrukcji if() - wystrzeliłoby tylko raz, nawet jeśli warunek był fałszywy. –