$ (window) .scroll () срабатывает при загрузке страницы - PullRequest
7 голосов
/ 23 июня 2011

Есть ли способ предотвратить срабатывание $(window).scroll() при загрузке страницы?

Тестируя следующий код в Firefox 4, он срабатывает даже когда я отключаю мышь.

Ответы [ 5 ]

10 голосов
/ 23 июня 2011

Событие scroll не связано с мышью, оно вызывается всякий раз, когда устанавливается новая позиция прокрутки документа.И, возможно, эта позиция устанавливается при загрузке документа (вы можете загрузить его привязкой в ​​конце концов), также если пользователь нажимает клавишу курсора на своей клавиатуре.Я не знаю, почему вам нужно игнорировать начальное событие scroll, но я думаю, что вы хотите сделать это, только если pageYOffset равно нулю.Это просто:

var oldPageYOffset = 0;
$(window).scroll(function(){
  if (window.pageYOffset != oldPageYOffset)
  {
    oldPageYOffset = window.pageYOffset;
    console.log("Window scrolling changed");
  }
});

Примечание : MSIE не имеет свойства window.pageYOffset, поэтому вышеперечисленное необходимо будет скорректировать.Возможно, jQuery предлагает кросс-браузерную альтернативу.

7 голосов
/ 01 июля 2011

Это было решение, которое я выбрал. Любые улучшения получены с благодарностью.

   var scroll = 0;
    $(window).scroll(function(){
                    if (scroll>0){
                    console.log("Scroll Fired");
                    }
                    scroll++;
    });
3 голосов
/ 04 декабря 2015

Событие прокрутки не срабатывает при каждой загрузке, только при обновлении прокручиваемой страницы или при прямой навигации к привязке.

Во многих ответах предлагается игнорировать первый раз, когда он вызывается, что будет игнорировать действительную прокрутку, если страница не будет прокручена изначально.

//Scroll the page and then reload just the iframe (right click, reload frame)


//Timeout of 1 was not reliable, 10 seemed to be where I tested it, but again, this is not very elegant.
//This will not fire initially
setTimeout(function(){
  $(window).scroll(function(){
     console.log('delayed scroll handler');
  }); 
}, 10); 

//This will fire initially when reloading the page and re-establishing the scroll position
$(window).scroll(function(){
  console.log('regular scroll handler');
});
div {  
  height: 2000px;
  border: 1px solid red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
</div>
0 голосов
/ 29 июня 2019

Кажется, это сработало для меня.

$(window).bind("load", function() {
    $(window).on("scroll", function () {
        console.log('scroll');
    });
});
0 голосов
/ 23 июня 2011

конечно, не загружайте его до окончания загрузки.перезвоните на 500 миллис.

...