2010-07-28 16 views
7

¿Hay un evento beforeScroll en jQuery? ¿O puede este tipo de evento ser replicado en absoluto?jQuery beforeScroll evento

Tenemos un escenario en el que necesitamos realizar un evento antes de un div con desbordamiento: el desplazamiento se ha desplazado. El problema con el uso del evento .scroll es que esto se produce después de que se haya desplazado div en lugar de antes.

+2

¿Quiere decir después de realizar el desplazamiento pero antes de que se haya producido el desplazamiento real? – David

+1

@David - Sí, acerta. –

Respuesta

6

No, no hay tal evento. El evento de desplazamiento no se puede cancelar (por razones obvias) y especularía que se dispara después de la acción para que las propiedades scrollTop y scrollLeft sean precisas cuando se acceda.

Posibles soluciones pueden ser capturar los eventos mousewheel/DOMMouseScroll y los eventos de tecla para las teclas de página arriba, página abajo, arriba, abajo, etc. Sin embargo, no hay un método 100%: nunca podrás evitar que el usuario interactúe con los componentes de la barra de desplazamiento del navegador. La única solución verdadera es desplegar sus propias barras de desplazamiento.

Si usted está buscando para encontrar la cantidad que el usuario desplaza, podría configurar un temporizador para almacenar la corriente scrollLeft/scrollTop en una variable y luego ver de frente a los nuevos valores en el casode desplazamiento.

+0

Entonces, ¿puedo tomar el evento cuando el usuario hace clic en la barra de desplazamiento del navegador antes de que se active el evento .scroll? Es decir. ¿El evento keydown se dispara antes del evento scroll? –

+0

@Robert: no, la barra de desplazamiento es un elemento de IU y no activará los eventos del mouse. El evento de selección se activará antes del evento de desplazamiento porque se puede cancelar para evitar desplazarse con las teclas si lo desea. Como dije, no hay un método 100%, lo mejor que puedes hacer es crear tu propia barra de desplazamiento. –

0

He resuelto esto de una manera cruda que resultó ser sorprendentemente no-lag:

que actualizar la posición a mí mismo después de comprobar que la posición está dentro del rango que yo quiero, utilizando la posición = fijo, y alterar el valor superior.