Quiero que mi función se active al desplazarse, pero luego espere 250 ms hasta que pueda activarse nuevamente.
function myFunction() { console.log('hello'); } $(window).on('scroll', function() { myFunction(); });He intentado un tiempo de espera:
$(window).on('scroll', function() { setTimeout(function() { myFunction(); }, 250); });Sin embargo, este método demora 250 ms antes de activar la función.
Según esta respuesta , puede agregar un indicador para que no se disparen eventos adicionales y luego borrar ese indicador con un tiempo de espera.
Tenga en cuenta que esto perderá/caerá eventos dentro del tiempo de espera, por lo que no debe usarse para algo como la entrada del teclado del usuario; donde el rebote sería más adecuado.
var active = false; $(window).on('scroll', function() { if (active) return; active = true; myFunction(); setTimeout(function() { active = false; }, 250); }); function myFunction() { console.log("scroll"); } <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div style='height:30000px;'> something to scroll </div>Esta es una implementación básica del acelerador. Las mejoras serían hacerlo modular/espacio de nombres y/o almacenar el indicador "activo" en el elemento mismo; para que el mismo evento se pueda reutilizar para múltiples elementos y no cree muchas variables globales.
Simplemente llame a su función una vez fuera de setTimeout .
$(window).on('scroll', function() { myFunction(); // call once setTimeout(function() { myFunction(); }, 250); // repeat call after 250ms }); Use setInterval en lugar de setTimeout si desea llamadas repetidas cada 250 ms.