Detectar si el usuario se desplaza


85

¿Cómo puedo detectar en javascript si el usuario se desplaza?


No, quiero escribir desde otra función if(scolling). Es if(window.onscroll)lo mismo?
user1365010

Puede establecer scrollingen el onscroll. (PD: no, eso no es lo mismo)
Rocket Hazmat

3
El usuario nunca "se desplaza". Solo hay una acción de desplazamiento, no un estado de desplazamiento.
Kendall Frey

1
@ user1365010: ¡D'OH! No pensé en eso. ¿Qué estás tratando de hacer exactamente? ¿Por qué necesita saber si el usuario se desplaza?
Rocket Hazmat

2
Interesante. Nunca he 'reiniciado' un pergamino. ¿Cuidado para elaborar?
Kendall Frey

Respuestas:


87

esto funciona:

window.onscroll = function (e) {  
// called when the window is scrolled.  
} 

editar:

dijiste que esta es una función en un TimeInterval ..
Intenta hacerlo así:

userHasScrolled = false;
window.onscroll = function (e)
{
    userHasScrolled = true;
}

luego, dentro de su intervalo, inserte esto:

if(userHasScrolled)
{
//do your code here
userHasScrolled = false;
}

¡Pero es una función en un setInterval!
user1365010

4
@ user1365010: ¿Qué es? ¿De qué estás hablando? Necesita agregar más detalles a la pregunta.
Rocket Hazmat

6
@ user1365010 esta respuesta es (en esencia) lo mejor que puede hacer.
Matt Ball

#FYI, parece que no funciona cuando el contenedor se desplazaba, body.scroll () funciona, así que agregué ambos,
Selva Ganapathi

12

Acabas de decir javascript en tus etiquetas, por lo que la publicación de @Wampie Driessen podría ayudarte.

También quiero contribuir, por lo que puede usar lo siguiente cuando use jQuery si lo necesita.

 //Firefox
 $('#elem').bind('DOMMouseScroll', function(e){
     if(e.detail > 0) {
         //scroll down
         console.log('Down');
     }else {
         //scroll up
         console.log('Up');
     }

     //prevent page fom scrolling
     return false;
 });

 //IE, Opera, Safari
 $('#elem').bind('mousewheel', function(e){
     if(e.wheelDelta< 0) {
         //scroll down
         console.log('Down');
     }else {
         //scroll up
         console.log('Up');
     }

     //prevent page fom scrolling
     return false;
 });

Otro ejemplo:

$(function(){
    var _top = $(window).scrollTop();
    var _direction;
    $(window).scroll(function(){
        var _cur_top = $(window).scrollTop();
        if(_top < _cur_top)
        {
            _direction = 'down';
        }
        else
        {
            _direction = 'up';
        }
        _top = _cur_top;
        console.log(_direction);
    });
});​

2
¿No se supone que jQuery abstrae las diferencias del navegador? ¿Por qué tiene métodos para diferentes navegadores? ¿ $('#elem').bind('scroll'No es lo suficientemente bueno? EDITAR: No importa, vi tu segundo ejemplo.
Rocket Hazmat

1
nada de malo con un poco de javascript nativo de vez en cuando.
AGDM

¿No te refieres e.originalEvent.wheelDelta || e.originalEvent.detail?
JacobRossDev

2
ADVERTENCIA: Los eventos de rueda en esta respuesta no son estándar y están obsoletos. Utilice el wheelevento.
Alexander O'Mara

No lo he probado, pero según MDN DOMMouseScroll no es compatible con la mayoría de los navegadores developer.mozilla.org/en-US/docs/Web/Events/DOMMouseScroll
Liron Yahdav

6
window.addEventListener("scroll",function(){
    window.lastScrollTime = new Date().getTime()
});
function is_scrolling() {
    return window.lastScrollTime && new Date().getTime() < window.lastScrollTime + 500
}

Cambie 500 a la cantidad de milisegundos después del último evento de desplazamiento en el que considera que el usuario "ya no se desplaza".

( addEventListeneres mejor que onScrollporque el primero puede coexistir muy bien con cualquier otro código que se use onScroll).


0

Use un intervalo para verificar

Puede configurar un intervalo para seguir comprobando si el usuario se ha desplazado y luego hacer algo en consecuencia.

Tomando prestado del gran John Resig en su artículo .

Ejemplo:

    let didScroll = false;

    window.onscroll = () => didScroll = true;

    setInterval(() => {
        if ( didScroll ) {
            didScroll = false;
            console.log('Someone scrolled me!')
        }
    }, 250);

Ver ejemplo en vivo

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.