Подтвердить что ты не робот

Обнаружение направления прокрутки

Поэтому я пытаюсь использовать JavaScript on scroll для вызова функции. Но я хотел знать, могу ли я определить направление прокрутки без использования jQuery. Если нет, то есть ли какие-либо обходные пути?

Я думал просто положить кнопку "сверху", но хотел бы избежать этого, если бы мог.

Я просто попробовал использовать этот код, но он не работал:

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

Ответ 1

Его можно обнаружить, сохранив предыдущее значение scrollTop и сравнив текущее значение 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 <= 0 ? 0 : st; // For Mobile or negative scrolling
}, false);

Ответ 2

Простой способ поймать все события прокрутки (касание и колесо)

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

Ответ 3

Используйте это, чтобы найти направление прокрутки. Это только для того, чтобы найти направление вертикальной прокрутки. Поддерживает все кросс-браузеры.

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

    }

пример

Ответ 4

Это дополнение к тому, что ответил prateek. Кажется, что сбой в коде IE, поэтому я решил немного изменить его (просто другое условие)

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

Ответ 5

Вы можете попробовать это сделать.

function scrollDetect(){
  var lastScroll = 0;

  window.onscroll = function() {
      let currentScroll = document.documentElement.scrollTop || document.body.scrollTop; // Get Current Scroll Value

      if (currentScroll > 0 && lastScroll <= currentScroll){
        lastScroll = currentScroll;
        document.getElementById("scrollLoc").innerHTML = "Scrolling DOWN";
      }else{
        lastScroll = currentScroll;
        document.getElementById("scrollLoc").innerHTML = "Scrolling UP";
      }
  };
}


scrollDetect();
html,body{
  height:100%;
  width:100%;
  margin:0;
  padding:0;
}

.cont{
  height:100%;
  width:100%;
}

.item{
  margin:0;
  padding:0;
  height:100%;
  width:100%;
  background: #ffad33;
}

.red{
  background: red;
}

p{
  position:fixed;
  font-size:25px;
  top:5%;
  left:5%;
}
<div class="cont">
  <div class="item"></div>
  <div class="item red"></div>
  <p id="scrollLoc">0</p>
</div>

Ответ 6

Вы можете получить позицию полосы прокрутки, используя document.documentElement.scrollTop. И тогда это просто вопрос сравнения его с предыдущей позицией.

Ответ 7

  1. Инициализировать oldValue
  2. Получить новое значение, слушая событие
  3. Вычесть два
  4. Вывод из результата
  5. Обновите oldValue с помощью newValue

//Инициализация

let oldValue = 0;

//Прослушивание события

window.addEventListener('scroll', function(e){

    // Get the new Value
    newValue = window.pageYOffset;

    //Subtract the two and conclude
    if(oldValue - newValue < 0){
        console.log("Up");
    } else if(oldValue - newValue > 0){
        console.log("Down");
    }

    // Update the old value
    oldValue = newValue;
});

Ответ 8

Вот ответ @IT VLOG на то, что вы можете сделать. Это сработало идеально для меня, спасибо! все остальное не работает для мобильных свитков, и это очень просто, без использования какой-либо библиотеки.

window.onscroll = function(e) {

        if(this.oldScroll > this.scrollY){
            <!-- do something if TRUE  -->
        }
        else {
            <!-- Do something on FALSE -->
        }
    this.oldScroll = this.scrollY;
    }

Ответ 9

Вы можете проверить deltaY в onwheel события:

window.onwheel = function(e) {
    if(e.deltaY > 0) {
        console.log("Scrolling downwards");
    } else {
        console.log("Scrolling upwards");
    }
}

Ответ 10

Я лично использую этот код для определения направления прокрутки в JavaScript... Просто вам нужно определить переменную для хранения lastscrollvalue, а затем использовать ее, если & else

let lastscrollvalue;

function headeronscroll() {

    // document on which scroll event will occur
    var a = document.querySelector('.refcontainer'); 

    if (lastscrollvalue == undefined) {

        lastscrollvalue = a.scrollTop;

        // sets lastscrollvalue
    } else if (a.scrollTop > lastscrollvalue) {

        // downscroll rules will be here
        lastscrollvalue = a.scrollTop;

    } else if (a.scrollTop < lastscrollvalue) {

        // upscroll rules will be here
        lastscrollvalue = a.scrollTop;

    }
}