2011-09-06 18 views
5

Ho ottenuto questo semplice script per scorrere la paginascorrere la pagina fino a quando automaticamente l'utente scorre fino

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

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

Ora desidero intercettare quando l'utente scorre fino se stesso per fermare la setTimeout con un

clearTimeout(scrolldelay); 

Qualche idea? Preferibile con js puri

Un'alternativa alla risposta accettata è qui: http://jsfiddle.net/Vy8tW/

risposta

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(); 

Come funziona: Ogni volta che la pagina viene fatto scorrere, confronta lo scrollTop corrente a quello precedente. Se rileviamo che la pagina è stata scorsa, interrompiamo l'intervallo.

È possibile riavviare lo scorrimento chiamando di nuovo start().

Prova qui: http://jsfiddle.net/fR9Wt/3/

+0

Soluzione perfetta, anche se in questo caso preferisco il codice più semplice. Ho scritto questo http://jsfiddle.net/Vy8tW/ con onmousewhell – dynamic

+0

Bella soluzione anche. Tuttavia, non funzionerà con le chiavi pageup/pagedown;) – arnaud576875

+0

Sì, certo, funzionerà solo con il whell, ma questo non è un problema – dynamic

1

è necessario acquisire l'evento di scorrimento da parte dell'utente.

Se stai usando jQuery (o forse una biblioteca simile che offre funzionalità simili) è possibile rilevare con .scroll()

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

In caso contrario, sarà necessario acquisire l'evento di scorrimento da soli. Se questo è inteso per uso cross-browser, lo schema di denominazione degli eventi sarà "scroll" per i browser standard e "onscroll" per IE.

Questa pagina ha alcuni esempi molto semplici, http://help.dottoro.com/ljurkcpe.php

+0

ho bisogno solo per Chrome. Penso di poter usare onmousewheel per essere sicuro che le mie funzioni scrollDown non vengano attivate – dynamic

+1

window.scrollBy() innesca un evento scroll ;-) – arnaud576875

Problemi correlati