función de devolución de llamada jQuery después de todo el desplazamiento

vinculé algunas funciones al evento 'desplazamiento' de jquery. Con este:

$window.bind('scroll', function(){ 
        fn1(...);
        afterScroll(); // function which should fired after whole scrolling.            
})

El problema es que quiero que se active la función "afterScroll()" después de todas las iteraciones de desplazamiento. Pero creo que cuando el usuario se desplaza una vez, la función de evento se activará varias veces (lo probé con algunas alertas) afterScroll() debería agregar una breve animación después de que el desplazamiento haya terminado definitivamente.

Por ejemplo: http://activatedrinks.com/

Alguien una idea? Gracias

saludos yannick

preguntado el 22 de mayo de 12 a las 16:05

posible duplicado de ¿Cómo llamar a una función después de que finalice el desplazamiento? - Utilice la búsqueda antes de hacer una nueva pregunta. -

3 Respuestas

Es difícil decir cuándo un usuario ha terminado de desplazarse y no existe tal evento. Debe tomar la determinación de cuándo un usuario ha "terminado" de desplazarse por su cuenta. Algunos usuarios pueden desplazarse muy lentamente, pero aun así lo considerarían como un desplazamiento único. Algo como..

var scrolltime = false;
$window.scroll(function () {
   fn1(...);
   if (scrolltime) {
      clearTimeout(scrolltime);
   }
   //You consider 500 MS between scrolls to be "done" with scrolling.
   scrolltime = setTimeout(afterScroll, 500);
});

contestado el 22 de mayo de 12 a las 16:05

necesitas rebote la devolución de llamada a afterScroll

básicamente, el rebote descarta todas las llamadas repetidas a la función, excepto la última, todo lo que necesita hacer es establecer un umbral para decirle qué es 'repetido'

aquí es la fuente de las funciones de aceleración/antirrebote. lib muy agradable y útil. Suelo incluirlo en mis proyectos.

contestado el 22 de mayo de 12 a las 16:05

Si te entendí bien, solo establece el tiempo de espera al final, borra el tiempo de espera si el desplazamiento continúa.

setTimeout(1000, function(){ afterScroll(); });

contestado el 22 de mayo de 12 a las 16:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.