2011-08-09 13 views
6

Se sabe que el evento scroll se activó utilizando la rueda del mouse, haciendo clic en las flechas de la barra de desplazamiento o dinámicamente con la función window.scrollTo(left, top).Determine qué evento de desplazamiento provocó que se dispare

¿Es posible determinar qué causó que se disparara el evento scroll? Ya sea la intervención del usuario o el código JS?

Respuesta

5

No creo que pueda determinar qué causó el desplazamiento. El evento de desplazamiento solo indica que la ventana se está desplazando, no por qué está desplazándose.

Pero tal vez suspenda el detector de eventos de desplazamiento o establezca un indicador antes de llamar al window.scrollTo() desde su código. Aquí en Safari, si utiliza scrollTo(), el evento de desplazamiento sólo se activa una vez, independientemente de cuánto se desplaza, por lo que posiblemente podría hacer algo como esto:

// somewhere in your code... 
isCodedScrollEvent = true; 
window.scrollTo(0, 200); 

// elsewhere in your code... 
function scrollListener(event) { 
    if(isCodedScrollEvent) { 
     // event was caused by code, so handle it differently 
     // and then flip the flag back to false, so the next 
     // will be handled normally again 
     isCodedScrollEvent = false; 
    } else { 
     // event was caused by user 
    } 
} 

No es bonita, pero debe trabajar

+0

usé algo como esto recientemente, puedo responder, en realidad funciona bastante bien. Estaba tratando de detectar cuándo un evento de desplazamiento era de un usuario en medio de un desplazamiento de desplazamiento. Estaba usando la función de línea de tiempo 'onUpdate()' de Greensock y encontré que si establecía un indicador en esa función, se sincronizaría bien con el oyente de desplazamiento. Luego, acaba de restablecer la bandera. Si un usuario interrumpió el desplazamiento, la bandera no se establecerá y puede matar su animación ... – newshorts

Cuestiones relacionadas