JQuery page scroll event logic – comment accélérer

J'ai quelques configurations d'auditeurs jQuery comme suit:

$(document).scroll(function() { if( $(this).scrollTop() < change1) { updateBarChart('valuem', 'opencomparison'); } else if ( $(this).scrollTop() > change1 && $(this).scrollTop() < change2) { updateBarChart('valuef', 'opencomparison'); } else if ($(this).scrollTop() > change2) { updateBarChart('valuem', 'remove') //updateSteamChart('','steam') } }); 

C'est assez simple. Certains tableaux sont mis à jour lors du changement de défilement.

Mon problème, c'est envoyer trop de mises à jour de fonctions. J'aimerais s'il y avait un moyen d'accélérer le .scroll (function () {}). De cette façon, moins de mises à jour d'événements sont déclenchées.

Des idées?

Un moyen assez simple d'obtenir un étranglement pourrait être d'ajouter un contrôle contre une valeur aléatoire afin qu'il ne déclenche qu'un certain pourcentage du temps:

 $(document).scroll(function() { //Only fires 10% of the time if (Math.random() < 0.1) { if( $(this).scrollTop() < change1) { updateBarChart('valuem', 'opencomparison'); } else if ( $(this).scrollTop() > change1 && $(this).scrollTop() < change2) { updateBarChart('valuef', 'opencomparison'); } else if ($(this).scrollTop() > change2) { updateBarChart('valuem', 'remove'); } } }); 

Alternativement, vous pouvez utiliser une minuterie de sorte qu'il ne se déclenche qu'une seule fois par x millisecondes:

 $(document).scroll(function() { //Only fires at most once every half-second if (timer > 500) { timer = 0; if( $(this).scrollTop() < change1) { updateBarChart('valuem', 'opencomparison'); } else if ( $(this).scrollTop() > change1 && $(this).scrollTop() < change2) { updateBarChart('valuef', 'opencomparison'); } else if ($(this).scrollTop() > change2) { updateBarChart('valuem', 'remove'); } } }); var timer = 0; setInterval(function () { timer += 50; }, 50);