Как определить направление события прокрутки jQuery? - PullRequest
326 голосов
/ 01 декабря 2010

Я ищу что-то на этот счет:

$(window).scroll(function(event){
   if (/* magic code*/ ){
       // upscroll code
   } else {
      // downscroll code
   }
});

Есть идеи?

Ответы [ 25 ]

3 голосов
/ 11 сентября 2016

Вы можете определить направление оболочки мыши.

$(window).on('mousewheel DOMMouseScroll', function (e) {
    var delta = e.originalEvent.wheelDelta ? 
                   e.originalEvent.wheelDelta : -e.originalEvent.detail;

    if (delta >= 0) {
        console.log('scroll up');
    } else {
        console.log('scroll down');
    }
});
2 голосов
/ 02 октября 2018

этот код отлично работает с IE, Firefox, Opera и Chrome:

$(window).bind('wheel mousewheel', function(event) {
      if (event.originalEvent.deltaY >= 0) {
          console.log('Scroll down');
      }
      else {
          console.log('Scroll up');
      }
  });

колесо колесика мыши и свойство deltaY должны использоваться в функции bind () .

Помните: ваш пользователь должен обновить свою систему и браузеры из соображений безопасности. В 2018 году оправдание «у меня IE 7» - это чепуха. Мы должны обучать пользователей.

Хорошего дня:)

2 голосов
/ 15 июня 2017

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

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

    }

Пример

2 голосов
/ 12 марта 2017

Вы можете использовать опции прокрутки и колесика мыши для одновременного отслеживания движения вверх и вниз.

 $('body').bind('scroll mousewheel', function(event) {

if (event.originalEvent.wheelDelta >= 0) {
      console.log('moving down');   
    }
    else {
      console.log('moving up'); 
    }
});

Вы также можете заменить «тело» на (окно).

2 голосов
/ 09 ноября 2016

Сделайте это очень просто:

Способ прослушивания событий jQuery:

$(window).on('wheel', function(){
  whichDirection(event);
});

Путь прослушивателя событий Vanilla JavaScript:

if(window.addEventListener){
  addEventListener('wheel', whichDirection, false);
} else if (window.attachEvent) {
  attachEvent('wheel', whichDirection, false);
}

Функция остается прежней:

function whichDirection(event){
  console.log(event + ' WheelEvent has all kinds of good stuff to work with');
  var scrollDirection = event.deltaY;
  if(scrollDirection === 1){
    console.log('meet me at the club, going down', scrollDirection);
  } else if(scrollDirection === -1) {
    console.log('Going up, on a tuesday', scrollDirection);
  }
}

Я написал более подробный пост об этом здесь

1 голос
/ 26 сентября 2018

Почему никто не использует объект event, возвращаемый jQuery при прокрутке?

$window.on('scroll', function (event) {
    console.group('Scroll');
    console.info('Scroll event:', event);
    console.info('Position:', this.pageYOffset);
    console.info('Direction:', event.originalEvent.dir); // Here is the direction
    console.groupEnd();
});

Я использую chromium, и я не проверял в других браузерах, имеют ли они dir собственность.

1 голос
/ 11 декабря 2013

храните приращение прокручиваемого элемента .data (), после чего вы сможете проверить, сколько раз прокрутка достигла вершины.

1 голос
/ 18 марта 2019

Поскольку bind устарело на v3 ("заменено on") и wheel теперь поддерживается , забудьте wheelDelta:

$(window).on('wheel', function(e) {
  if (e.originalEvent.deltaY > 0) {
    console.log('down');
  } else {
    console.log('up');
  }
  if (e.originalEvent.deltaX > 0) {
    console.log('right');
  } else {
    console.log('left');
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h1 style="white-space:nowrap;overflow:scroll">
????????????????<br/>
????????????????<br/>
????????????????<br/>
????????????????<br/>
????????????????<br/>
????????????????<br/>
</h1>

wheel События Совместимость браузера с MDN (2019-03-18) :

Compatibility of the wheel event

0 голосов
/ 01 августа 2017

Вы должны попробовать это

var scrl
$(window).scroll(function(){
        if($(window).scrollTop() < scrl){
            //some code while previous scroll
        }else{
            if($(window).scrollTop() > 200){
                //scroll while downward
            }else{//scroll while downward after some specific height
            }
        }
        scrl = $(window).scrollTop();
    });
0 голосов
/ 30 декабря 2013

в .data() элемента вы можете сохранить JSON и проверить значения для запуска событий

{ top : 1,
   first_top_event: function(){ ...},
   second_top_event: function(){ ...},
   third_top_event: function(){ ...},
   scroll_down_event1: function(){ ...},
   scroll_down_event2: function(){ ...}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...