Détection du sens de défilement

J'essaie donc d'utiliser JavaScript on scroll pour appeler une fonction. Mais je voulais savoir si je pouvais détecter la direction du scroll sans utiliser jQuery. Sinon, y a-t-il des solutions de contournement?

Je pensais simplement mettre un bouton «en haut», mais j'aimerais éviter cela si je le pouvais.

Je viens juste d'essayer d'utiliser ce code mais ça n'a pas fonctionné:

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

Il peut être détecté en stockant la valeur de scrollTop précédente et en comparant la valeur actuelle de scrollTop.

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

Vous pouvez obtenir la position de la barre de défilement à l'aide de document.documentElement.scrollTop . Et il est simplement question de la comparer au poste précédent.

Utilisez ceci pour trouver le sens de défilement. Ceci est uniquement pour trouver la direction du défilement vertical. Prise en charge de tous les navigateurs croisés.

  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"); } } 

Exemple

Ceci est un ajout à ce que prateek a répondu. Il semble y avoir un problème dans le code dans IE, alors j'ai décidé de le modifier un peu rien de chic (juste une autre condition)

 $('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; });}); 

Un moyen simple d'attraper tous les événements de défilement (touche et roue)

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