2013-05-28 11 views
6

Ho la seguente funzione di jQuery che innesca aTestEvent() quando l'utente scorre orizzontalmente passato 500 pixel:jQuery - Scroll funzione mantiene Triggering: Solo una volta prega

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

Ecco il problema: io voglio solo aTestEvent() da attivare una volta ! Tuttavia, ogni volta che l'utente scorre di nuovo all'inizio della pagina e poi nuovamente oltre 500 pixel, aTestEvent() viene attivato di nuovo.

Come è possibile modificare il codice precedente in modo che il trigger si verifichi solo per la prima volta l'utente scorre oltre 500 pixel?

risposta

14

È possibile utilizzare on e off metodi:

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

http://jsfiddle.net/3kacd/

Nota: Questo frammento di codice potrebbe "off" tutto l'evento di scorrimento disponibili in una pagina particolare, ma per far scorrere fuori di scorrimento solo destinato gestore senza disturbare altri gestori di scroll, possiamo usare un namespace. I namespace sono simili alle classi CSS in quanto non sono gerarchici; solo un nome deve corrispondere.

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

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

+0

Che fa il trucco! Grazie mille. Accetterò una volta che posso. – tehSUPERADMIN

+0

@tehSUPERADMIN Siete i benvenuti. – undefined

+0

Un altro trucco utile è il metodo .one() meno conosciuto. http://api.jquery.com/one/ Molto utile di tanto in tanto, ma tecnicamente non funzionerebbe a causa dell'istruzione if(): sparerebbe solo una volta, anche se la condizione if fosse falsa. –