2015-07-04 4 views
30

Quindi sto cercando di utilizzare il codice JavaScript on scroll per chiamare una funzione. Ma volevo sapere se potevo rilevare la direzione dello scroll senza usare jQuery. Se no, allora ci sono soluzioni alternative?Rilevamento direzione scorrimento

Stavo pensando di mettere un pulsante "in alto" ma vorrei evitarlo se potessi.

ho ora solo provato ad utilizzare questo codice, ma non ha funzionato:

if document.body.scrollTop <= 0 { 
    alert ("scrolling down") 
} else { 
    alert ("scrolling up") 
} 
+0

e 'il 'wheelDelta 'dell'evento. Abbastanza non cross-browser. Vedi http://phrogz.net/js/wheeldelta.html – marekful

+1

hmmm non proprio quello che stavo cercando, ma apprezzo il tuo aiuto: P Altri suggerimenti? – dwinnbrown

risposta

2

è possibile ottenere la posizione della barra di scorrimento con document.documentElement.scrollTop. E poi è semplicemente questione di confrontarlo con la posizione precedente.

+0

Ok, potrei ancora usarlo su un sito web che non consente lo scrolling tradizionale (cioè si adatta al browser al 100% di larghezza e altezza.) Grazie – dwinnbrown

49

Può essere rilevato memorizzando il valore precedente di ScrollTop e confrontando il valore corrente di ScrollTop con esso.

JS:

var lastScrollTop = 0; 
// element should be replaced with the actual target element on which you have applied scroll, use window in case of no target element. 
element.addEventListener("scroll", function(){ // or window.addEventListener("scroll".... 
    var st = window.pageYOffset || document.documentElement.scrollTop; // Credits: "https://github.com/qeremy/so/blob/master/so.dom.js#L426" 
    if (st > lastScrollTop){ 
     // downscroll code 
    } else { 
     // upscroll code 
    } 
    lastScrollTop = st; 
}, false); 
+3

Sarebbe più sicuro inizializzare 'lastScrollTop' a pageYOffset || scrollTop piuttosto che assumere 0 –

+0

Totalmente d'accordo !! Grazie @EdBallot, dovremmo inizializzare lo stesso sull'evento window.onload – Prateek

+0

@Prateek Grazie per la tua risposta ma non funziona per me ... Sto provando a 'cambiare scena' nella mia webapp che è costruito utilizzando Tumult Hype. – dwinnbrown

5

Utilizzare questo per trovare la direzione di scorrimento. Questo è solo per trovare la direzione della Scorrimento verticale. Supporta tutti i browser incrociati.

var scrollableElement = document.getElementById('scrollableElement'); 

    scrollableElement.addEventListener('wheel', findScrollDirectionOtherBrowsers); 

    function findScrollDirectionOtherBrowsers(event){ 
     var delta; 

     if (event.wheelDelta){ 
      delta = event.wheelDelta; 
     }else{ 
      delta = -1 * event.deltaY; 
     } 

     if (delta < 0){ 
      console.log("DOWN"); 
     }else if (delta > 0){ 
      console.log("UP"); 
     } 

    } 

Example

3

Questa è un'aggiunta a quanto Prateek ha answered.There sembra essere un difetto nel codice di IE così ho deciso di modificarlo un po 'di fantasia nulla (solo un altro condizione)

$('document').ready(function() { 
var lastScrollTop = 0; 
$(window).scroll(function(event){ 
    var st = $(this).scrollTop(); 
    if (st > lastScrollTop){ 
     console.log("down") 
    } 
    else if(st == lastScrollTop) 
    { 
    //do nothing 
    //In IE this is an important condition because there seems to be some instances where the last scrollTop is equal to the new one 
    } 
    else { 
     console.log("up") 
    } 
    lastScrollTop = st; 
});}); 
+0

Grazie per il tuo suggerimento ... questo sembra essere collegato a IE " Opzione di scorrimento uniforme " – Kristo

7

modo semplice per catturare tutti gli eventi di scorrimento (touch e ruote)

window.onscroll = function(e) { 
    // print "false" if direction is down and "true" if up 
    console.log(this.oldScroll > this.scrollY); 
    this.oldScroll = this.scrollY; 
} 
+1

Benvenuti in SO, se aggiungete una descrizione alla vostra risposta, ciò può essere più utile per l'OP e per gli altri. –