2015-10-07 15 views
5

ho 2 eventidisabilita dopo la sua esecuzione

Primo:

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

Second:

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

Il primo evento che ho bisogno di disattivare dopo la sua esecuzione. Ma ho bisogno di lavorare un secondo evento.

risposta

5

È possibile aggiungere event namespace al primo evento e disabilitarlo poi da namespace dove vuoi:

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

Grazie mille! –

+2

Qualcuno può spiegarmi il suo downvote? – antyrat

2

Se si desidera "disable" un evento dopo la sua esecuzione Si potrebbe utilizzare jQuery .one()

Il .one() metodo è identico a .On(), salvo che il gestore è libero dopo la sua prima invocazione

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

Se si lookin g di un modo di disabilitare alcune callback evento dopo certe condizioni e non disattivare tutti loro È possibile aggiungere Event Namespace come @antyrat risposto

+0

Immagino che si fermerà dopo lo scroll start in quel caso. Ma OP vuole fermarlo solo quando raggiunge la condizione specifica – antyrat

+0

@antyrat sì, hai ragione ma la domanda OP non è chiara a riguardo, sta specificando in particolare 2 volte che l'evento deve essere disabilitato dopo la sua esecuzione;). – ecarrizo

2

Provare a utilizzare $.Callbacks("once") per chiamare circle al massimo una volta se la condizione ($(this).scrollTop()+h) >= $(".services-procent-ul").offset().top rendimenti veri

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

Sei sicuro che non si fermerà subito dopo l'avvio dell'evento di scorrimento della finestra? Ad esempio se '$ (this) .scrollTop()' diventerà da 0 a 1 e la condizione non verrà eseguita tutto si romperà – antyrat

+0

@antyrat Vedi il post aggiornato – guest271314

+0

comportamento ancora errato, 'scroller' funzionerà ma' circle() 'non verrà eseguito. – antyrat

Problemi correlati