2012-04-30 4 views
0

J'ai actuellement la fonction suivante qui récupère efficacement JSON de Django et charge les films par défilement infini. Cependant, je trouve que parfois cet événement se déclenche plusieurs fois, et il finit par obtenir la même page deux fois.Comment puis-je faire en sorte que cet écouteur jQuery ne se déclenche pas plusieurs fois?

$(window).scroll(function() { 
    var break_point = $(document).height() - ($(window).height() * 1.02); 
    if ($(window).scrollTop() >= break_point) { 
    var timePeriod = $('.tab-content').find('.active').attr('id'); 
    var nextPage = $('#'+timePeriod+' ul li:last').attr('data-next'); 
    if (nextPage) { 
     loadMovies(timePeriod, nextPage); 
    } 
    } 
}); 

Quelle est la meilleure façon d'empêcher l'exécution de cet écouteur plusieurs fois par page?

+0

[Est-ce ce que vous cherchez?] (Http://stackoverflow.com/questions/9144560/jquery-scroll-detect-when-user-stops-scrolling) - Aussi apparenté: [4620906] (http: //stackoverflow.com/questions/4620906), [8931605] (http://stackoverflow.com/questions/8931605) –

+0

Oui, cela a fonctionné parfaitement! Merci! – ArKi

Répondre

1

Merci à Rob pour l'aide! Je poste juste ce que j'ai fini par faire pour la référence de tout le monde.J'ai utilisé la fonction debounce de la bibliothèque underscore.js.

var infiniteScroll = _.debounce(function() { 
    var break_point = $(document).height() - ($(window).height() * 1.02); 
    if ($(window).scrollTop() >= break_point) { 
    var timePeriod = $('.tab-content').find('.active').attr('id'); 
    var nextPage = $('#'+timePeriod+' ul li:last').attr('data-next'); 
    if (nextPage) { 
     loadMovies(timePeriod, nextPage); 
    } 
    } 
}, 250); 

$(window).scroll(infiniteScroll); 
+0

m'a aidé avec mon problème, merci! –

0

utilisation .one ('scroll', function() au lieu de .scroll (fonction()

http://api.jquery.com/one/

En pensant à votre fonctionnalité, vous pourriez avoir à remettre en place le gestionnaire sur reload, cependant. Mais one() veillera à ce qu'il ne se déclenche qu'une fois que vous l'aurez attaché

+0

Hey, comment est-ce que je rattacherais le gestionnaire après qu'il se déclenche? – ArKi

+0

Vous pouvez, par exemple, mettre le code avec un() dans une fonction, puis appeler cette fonction dans votre document, puis l'appeler à nouveau sur retour. Ou, vous pourriez (même fonctionnalité) le laisser tel quel, le mettre dans une fonction, mais la première fois que vous faites un appel ajax (vraisemblablement?), Appelez unbind, puis appelez à nouveau la fonction en cas de succès. – Colleen

Questions connexes