2011-09-06 11 views
5

Tengo este script sencillo para desplazarse por la páginadesplazarse por la página automáticamente hasta que el usuario se desplaza hasta

function scrollDown() { 
    window.scrollBy(0,50); // horizontal and vertical scroll increments 
} 

scrolldelay = setTimeout('scrollDown()',100); // scrolls every 100 milliseconds 

Ahora deseo para interceptar cuando el usuario se desplaza a sí mismo para detener el setTimeout con un

clearTimeout(scrolldelay); 

¿Alguna idea? Preferible con js puros

Una alternativa a la respuesta aceptada es aquí: http://jsfiddle.net/Vy8tW/

Respuesta

4
var start = (function() { 
    function scrollTop() { 
     return window.scrollTop || document.body.scrollTop || (document.documentElement && document.documentElement.scrollTop) 
    } 

    var top = scrollTop(); 
    var interval; 
    window.onscroll = function() { 
     var newtop = scrollTop(); 
     if (newtop < top) { 
      clearInterval(interval); 
     } 
     top = newtop; 
    }; 
    return function() { 
     interval = setInterval(function() { 
      window.scrollBy(0, 50); 
     }, 100); 
    } 
}()); 

start(); 

Cómo funciona: Cada vez que la página se desplaza, se compara el scrollTop actual a la anterior. Si detectamos que la página se ha desplazado hacia arriba, detenemos el intervalo.

Puede volver a iniciar el desplazamiento llamando nuevamente a start().

probar aquí: http://jsfiddle.net/fR9Wt/3/

+0

Solución perfecta, aunque prefiero un código más simple en este caso. Escribí este http://jsfiddle.net/Vy8tW/ con onmousewhell – dynamic

+0

Buena solución también. Sin embargo, no funcionará con las teclas pageup/pagedown;) – arnaud576875

+0

Sí, por supuesto, funcionará solo con el whell, pero esto no es un problema – dynamic

1

lo necesario para capturar el evento de desplazamiento por parte del usuario.

Si estás usando jQuery (o tal vez una biblioteca similar que ofrece una funcionalidad similar) se puede detectar con .scroll()

$('#target').scroll(function() { 
    clearInterval(scrolldelay); 
}); 

De lo contrario, tendrá que capturar el evento de desplazamiento a ti mismo. Si esto fue diseñado para el uso de varios navegadores, el esquema de denominación de eventos será "scroll" para navegadores estándar y "onscroll" para IE.

Esta página tiene algunos ejemplos muy básicos, http://help.dottoro.com/ljurkcpe.php

+0

sólo necesito para el cromo. Creo que puedo usar onmousewheel para estar seguro de que mis funciones scrollDown no se activan – dynamic

+1

window.scrollBy() desencadena un evento de desplazamiento ;-) – arnaud576875

Cuestiones relacionadas