2015-10-07 22 views
5

Mam 2 zdarzeniawyłącza po jego wykonaniu

pierwsze:

$(window).on("scroll", function() { 
    if (($(this).scrollTop()+h) >= $(".services-procent-ul").offset().top){ 
     circle(); 
     $(window).off("scroll"); 
    } 
}); 

drugie:

$(window).on("scroll", function() { 
if($(window).scrollTop() > 0){ 
    $('.nav2').fadeIn('slow'); 
    $('.nav1').fadeOut('fast'); 
}else{ 
    $('.nav2').fadeOut('fast'); 
    $('.nav1').fadeIn('slow'); 
} 
}); 

Pierwszym wydarzeniem muszę wyłączyć po jego wykonaniu. Ale muszę popracować nad drugim wydarzeniem.

Odpowiedz

5

Możesz dodać event namespace do pierwszego zdarzenia i wyłączyć go następnie przez nazw gdziekolwiek chcesz:

$(window).on("scroll.once", function() { 
    ... 
    $(window).off("scroll.once"); 
+0

Dziękuję Ci bardzo! –

+2

Czy ktoś może mi wytłumaczyć jego upadek? – antyrat

2

Jeśli chcesz „wyłączyć” zdarzenie po jego wykonaniu można użyć jQuery .one()

.one() metoda jest identyczna .Na(), oprócz tego, że jest niezwiązana obsługi po pierwszym wywołaniu

$(window).one("scroll", function() { 
    //doSomething 
}); 

Jeśli spojrzysz g sposobu na wyłączenie pewnej zwrotnego zdarzenia po pewnym stanie i nie wyłączyć wszystkie z nich można dodać Event Namespace jak @antyrat odpowiedział

+0

Myślę, że zatrzyma się po przewinięciu w tym przypadku. Ale OP chce go zatrzymać tylko wtedy, gdy dotrze do konkretnego warunku. – antyrat

+0

@antyrat tak, masz rację, ale pytanie OP nie jest jednoznaczne, on mówi 2 razy, że zdarzenie musi być wyłączone po jego wykonaniu;). – ecarrizo

2

Spróbuj użyć $.Callbacks("once") zadzwonić circle co najwyżej jeden raz, jeżeli stan ($(this).scrollTop()+h) >= $(".services-procent-ul").offset().top Zwraca true

var callbacks = $.Callbacks("once"); 

    callbacks.add(circle); 

    var scroller = function() { 
      if ($(window).scrollTop() > 0) { 
      $('.nav2').fadeIn('slow'); 
      $('.nav1').fadeOut('fast'); 
      } else { 
      $('.nav2').fadeOut('fast'); 
      $('.nav1').fadeIn('slow'); 
      } 
     } 

    $(window).on("scroll", function() { 
     if (($(this).scrollTop()+h) >= $(".services-procent-ul").offset().top) { 
      callbacks.fire() 
     } 
     scroller() 

    }); 
+0

Czy jesteś pewien, że nie zatrzyma się zaraz po rozpoczęciu przewijania okna? Na przykład, jeśli '$ (this) .scrollTop()' stanie się od 0 do 1 i warunek nie zostanie wykonany wszystko zostanie zerwane – antyrat

+0

@antyrat Zobacz aktualne stanowisko – guest271314

+0

nadal złe zachowanie, 'scroller' będzie działał, ale' circle() 'nie zostanie wykonane. – antyrat

Powiązane problemy