Estoy buscando algo a este efecto:
$(window).scroll(function(event){
if (/* magic code*/ ){
// upscroll code
} else {
// downscroll code
}
});
¿Algunas ideas?
javascript
jquery
Zach
fuente
fuente
wheel
evento más fácil de usar en estos días: stackoverflow.com/a/33334461/3168107 .Respuestas:
Comprobar actual
scrollTop
vs anteriorscrollTop
fuente
lastScrollTop
en 0 o se inicializará correctamente?var lastScrollTop = $(window).scrollTop()
después de que el navegador actualice la posición de desplazamiento al cargar la página.Puede hacerlo sin tener que realizar un seguimiento de la parte superior de desplazamiento anterior, ya que todos los demás ejemplos requieren:
No soy un experto en esto, así que siéntase libre de investigarlo más a fondo, pero parece que cuando lo usa
$(element).scroll
, el evento que se está escuchando es un evento de 'desplazamiento'.Pero si escucha específicamente un
mousewheel
evento utilizando bind, eloriginalEvent
atributo del parámetro de evento a su devolución de llamada contiene información diferente. Parte de esa información eswheelDelta
. Si es positivo, movió la rueda del mouse hacia arriba. Si es negativo, movió la rueda del mouse hacia abajo.Supongo que los
mousewheel
eventos se dispararán cuando la rueda del mouse gire, incluso si la página no se desplaza; un caso en el que los eventos de 'desplazamiento' probablemente no se activen. Si lo desea, puede llamarevent.preventDefault()
al final de su devolución de llamada para evitar que la página se desplace, y para que pueda usar el evento de la rueda del mouse para algo que no sea un desplazamiento de página, como algún tipo de funcionalidad de zoom.fuente
scrollTop
lo que no se actualizó. De hecho,$(window).scroll()
no disparó en absoluto.Almacene la ubicación de desplazamiento anterior, luego vea si la nueva es mayor o menor que eso.
Aquí hay una manera de evitar cualquier variable global ( violín disponible aquí ):
fuente
Solución existente
Podría haber 3 soluciones de esta publicación y otra respuesta .
Solución 1
Solución 2
Solución 3
Prueba de navegador múltiple
No pude probarlo en Safari
Chrome 42 (gana 7)
Firefox 37 (Win 7)
IE 11 (Win 8)
IE 10 (Win 7)
IE 9 (Win 7)
IE 8 (Win 7)
Solución combinada
De la prueba de navegador múltiple, decidí usar la Solución 3 para navegadores comunes y la Solución 1 para firefox e IE 11.
Remití esta respuesta para detectar IE 11.
fuente
Safari browser
, sería útil complementar la solución.Entiendo que ya ha habido una respuesta aceptada, pero quería publicar lo que estoy usando en caso de que pueda ayudar a alguien.
cliphex
Obtuve la dirección como con el evento mousewheel pero con soporte para Firefox. Es útil hacerlo de esta manera en caso de que esté haciendo algo como bloquear el desplazamiento y no pueda obtener la parte superior del desplazamiento actual.Vea una versión en vivo aquí .
fuente
Evento de desplazamiento
El evento de desplazamiento se comporta de manera extraña en FF (se dispara muchas veces debido al desplazamiento de suavidad) pero funciona.
Nota: El evento de desplazamiento en realidad se activa al arrastrar la barra de desplazamiento, usando las teclas del cursor o la rueda del mouse.
Evento de rueda
También puede echar un vistazo a MDN, que expone una gran información sobre el evento de la rueda .
Nota: El evento de rueda se dispara solo cuando se usa la rueda del mouse ; Las teclas de cursor y arrastrar la barra de desplazamiento no activan el evento.
Leí el documento y el ejemplo: escuchando este evento en el navegador
y después de algunas pruebas con FF, IE, Chrome, Safari, terminé con este fragmento:
fuente
En caso de que solo quiera saber si se desplaza hacia arriba o hacia abajo con un dispositivo puntero (mouse o track pad), puede usar la propiedad deltaY del
wheel
evento.fuente
o use la extensión de la rueda del mouse , vea aquí .
fuente
He visto muchas versiones de buenas respuestas aquí, pero parece que algunas personas tienen problemas de navegador cruzado, así que esta es mi solución.
Lo he utilizado con éxito para detectar la dirección en FF, IE y Chrome ... No lo he probado en safari, ya que normalmente uso Windows.
Tenga en cuenta que también uso esto para detener cualquier desplazamiento, por lo que si desea que se produzca el desplazamiento, debe eliminar el
e.preventDefault(); e.stopPropagation();
fuente
Para ignorar cualquier complemento / impulso / rebote en la parte superior e inferior de la página, aquí hay una versión modificada de la respuesta aceptada de Josiah :
fuente
Puede determinar la dirección del mousewhell.
fuente
Use esto para encontrar la dirección de desplazamiento. Esto es solo para encontrar la dirección del desplazamiento vertical. Admite todos los navegadores cruzados.
Ejemplo
fuente
Este código funciona bien con IE, Firefox, Opera y Chrome:
'wheel mousewheel' y la propiedad deltaY deben usarse en la función bind () .
Recuerde: su usuario debe actualizar su sistema y navegadores por razones de seguridad. En 2018, las excusas de "I have IE 7" no tienen sentido. Debemos educar a los usuarios.
Tenga un buen día :)
fuente
Mantenlo súper simple:
Forma de escucha de eventos jQuery:
Vanilla JavaScript Event Listener Way:
La función sigue siendo la misma:
Escribí un post más en profundidad sobre el mismo aquí
fuente
Puede usar la opción de desplazamiento y la rueda del mouse para rastrear el movimiento hacia arriba y hacia abajo a la vez.
Puede reemplazar 'cuerpo' con (ventana) también.
fuente
almacene un incremento en el
.data ()
elemento de desplazamiento, luego podrá probar la cantidad de veces que el desplazamiento alcanzó la parte superior.fuente
¿Por qué nadie usa el
event
objeto devuelto porjQuery
en scroll?Estoy usando
chromium
y no verifiqué en otros navegadores si tienen ladir
propiedad.fuente
Dado que
bind
ha quedado en desuso en v3 ("reemplazado poron
") ywheel
ahora es compatible , olvidewheelDelta
:wheel
Compatibilidad del navegador del evento en MDN (2019-03-18) :fuente
if(e.originalEvent.deltaY > 0) { console.log('down'); } else if(e.originalEvent.deltaY < 0) { console.log('up'); } else if(e.originalEvent.deltaX > 0) { console.log('right'); } else if(e.originalEvent.deltaX < 0) { console.log('left'); }
touchmove
evento de uso móvil en su lugar.Puedes usar esto también
fuente
en el
.data()
elemento puede almacenar un JSON y probar valores para lanzar eventosfuente
Esta es una detección simple y fácil para cuando el usuario se desplaza fuera de la parte superior de la página y cuando vuelve a la parte superior.
fuente
Esta es una solución óptima para detectar la dirección justo cuando el usuario finaliza el desplazamiento.
fuente
Deberías probar esto
fuente
Tuve problemas con el desplazamiento elástico (desplazamiento de desplazamiento, bandas de goma). Ignorar el evento de desplazamiento hacia abajo si está cerca de la parte superior de la página funcionó para mí.
fuente
Esto funciona en todos los navegadores de PC o teléfonos, expandiéndose en las respuestas principales. Se puede construir una ventana de objeto de evento más compleja ["scroll_evt"] y luego llamarla en la función handleScroll (). Éste se dispara para 2 condiciones concurrentes, si ha transcurrido cierto retraso o se pasa cierto delta para eliminar algunos disparadores no deseados.
fuente