Поймать скролл на чистом JS

$(function() {
    $(window).scroll(function() {
        if ($(this).scrollTop() == 400) {
            load();
        }
    });
});

Подскажите, пожалуйста, как аналогичное сделать на чистом JS?


Ответы (2 шт):

Автор решения: Aziz Umarov

Используйте событие scroll и свойство scrollY

window.addEventListener('scroll', function(e) {
    if (this.scrollY == 400) {
        load();
    }
});

→ Ссылка
Автор решения: CbIPoK2513

if(this.scrollTop == 400) { alert('test'); } не работает

Может и не сработать, потому что скролл движется с определённым шагом и ровно 400 пикселей может никогда и не выпасть.

По этому будем проверять на то, "перескочили" ли мы этот предел в 400 пикселей.
Но простое условие if(scroll > 400) будет выполняться каждый раз после 400.

Используем для этого булевевое значение и будем его изменять после "перескока".
if(scroll > 400 && boolean === false) boolean = true; - после такой проверки скрипт выполниться один раз.

var eScroll = 400,  // После скольки пикселей запустить что-то
    is400px = false; // Чтобы скрипт не срабатывал каждый раз после 400px
    
window.addEventListener('scroll', function(){
  console.clear();
  console.info(this.scrollY);
  
  if(this.scrollY >= eScroll && is400px === false) {
    is400px = true;
    load();
  }
});

function load() {
  document.body.style.backgroundColor = 'gray';
}
body {
  height: calc(500px + 100vh);
}

Так же обратите внимание на то, какое число будет указанно в консоли.

→ Ссылка