2011-01-12 38 views
26

Estoy diseñando una página web muy simple (solo HTML), la única "característica" que quiero implementar es hacer algo cuando el usuario se desplaza hacia abajo por la página, ¿hay alguna manera de capturar ese "evento" de alguna manera?¿Capturar el evento "desplazarse hacia abajo"?

Respuesta

16

simplemente para la corrección, no hay otra solución utilizando otro marco JS (Mootools)

window.addEvent('scroll',function(e) { 
    //do stuff 
}); 
+1

¿Por qué? no usando 'window.addEventListener (" scroll ", function (e) {...});'? Debido a las 8 letras adicionales? –

+1

Porque de esa manera (la forma de los mootools) soportas (ed) también IE <9 (cosas de attachEvent) ... – stecb

+0

¿Está modificando el 'prototipo' de' window'? –

22

No puede hacerlo con solo HTML, necesitará usar Javascript. Recomiendo el uso de jQuery, por lo que su solución puede tener este aspecto:

$(document).ready(function() { 
    $(window).scroll(function() { 
     // do whatever you need here. 
    }); 
}); 

Si no quiere o no puede utilizar jQuery, puede utilizar la solución onscroll publicado por Anthony.

+0

Supongo que está buscando solo desplazamiento hacia abajo, no hacia arriba. ¿Hay algo para bajar el scroll solamente? –

37

Si no desea utilizar jQuery (que puede que no hacer por una página HTML muy simple), se puede lograr esto usando Javascript normal:

<script> 
function scrollFunction() { 
    // do your stuff here; 
} 

window.onscroll = scrollFunction; 
</script> 

Usted ha dicho que quería hacer algo cuando despliegan abajo la página - el evento onscroll dispara desplazándose en cualquier dirección, ya sea en el eje xey, por lo que se llamará a su función cada vez que se desplace.

Si realmente desea que solo se ejecute el código cuando se desplaza hacia abajo de la página, deberá conservar la posición de desplazamiento anterior para comparar cada vez que se llame a onscroll.

+3

Debería usar 'attachEvent' (IE) y' addEventListener' (todo lo demás) probablemente en lugar de 'onscroll'. – crush

+0

@crush, ¿Por qué usar attachEvent y addEventListener en lugar de onscroll? – Pacerier

+1

@Pacerier Bueno, permítame volver a visitar este comentario porque es engañoso, y se basa en información defectuosa que obtuve y que se propaga por Internet. De acuerdo con la [especificación W3C HTML5] (http://www.w3.org/TR/html5/webappapis.html#event-handlers-on-elements,-document-objects,-and-window-objects), existe nada de malo con el uso de 'onscroll'. Es importante señalar que 'onscroll' específicamente, no existía en la [especificación HTML4] (http://www.w3.org/TR/html4/interact/scripts.html#h-18.2.3). – crush

11

Una mejor manera es no sólo para comprobar si hay eventos de desplazamiento, sino también para la dirección de desplazamiento, como a continuación;

$(window).bind('mousewheel', function(event) { 
if (event.originalEvent.wheelDelta >= 0) { 
    console.log('Scroll up'); 
} 
else { 
    console.log('Scroll down'); 
} 
}); 
+2

Esta debería ser la respuesta correcta. –

+0

¿Qué sucede si no usa la rueda del mouse para desplazarse, o utiliza un dispositivo táctil? – HyderA

+0

@hydeA los diferentes dispositivos reaccionan de manera diferente. Para esto, es posible que tengas que usar un plugin como hammerjs o algo similar. De lo contrario, creo que esto ha sido respondido aquí http://stackoverflow.com/questions/2863547/javascript-scroll-event-for-iphone-ipad –

0

Esto funciona para mí.

var previousPosition 

$(window).scroll(function(){ 
    var currentScrollPosition=$(window).scrollTop() + $(window).height() 
    if (currentScrollPosition>previousScrollPosition) { 
    console.log('down') 
    }else if(currentScrollPosition<previousScrollPosition){ 
    console.log('up') 
    } 
    previousScrollPosition=currentScrollPosition 
}); 
Cuestiones relacionadas