$(window).scroll()在页面加载时触发

有没有办法阻止$(window).scroll()在页面加载时触发?

在Firefox 4中测试以下代码,即使我拔下鼠标,它也会触发。

 jQuery(document).ready(function($){ $(window).scroll(function(){ console.log("Scroll Fired"); }); }); 

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提供了跨浏览器的替代方案。

这是我去的解决方案。 任何改进都感激不尽。

  var scroll = 0; $(window).scroll(function(){ if (scroll>0){ console.log("Scroll Fired"); } scroll++; }); 

仅当刷新滚动的页面或直接导航到锚点时,滚动事件才会在每次加载时触发。

许多答案建议在第一次调用时忽略,如果页面最初没有滚动,则忽略有效滚动。

 //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; } 
  

当然,在装载之前不要加载它。 让它成为500毫安的睡眠回叫。