2011-06-23 216 views
5

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

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

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

你在哪里需要防止滚动任何的例子吗? – genesis

+0

我只需要防止在没有滚动发生时触发滚动事件。 –

+2

当心挂钩窗口滚动事件http://ejohn.org/blog/learning-from-twitter/ – redsquare

回答

9

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提供了一个跨浏览器的选择。

+0

这几乎就在那里,我简直就是需要防止第一次运行! –

+3

@Mild Fuzz:如果你解释你想要达到的目标而不是你想达到目标的方式,你会得到更好的答案。认为忽略第一个滚动事件对你来说是最好的解决方案,但这可能不是这种情况(并且不可能告诉你是否不提供更多信息)。无论哪种方式,你也可以用'window.pageYOffset'来初始化'oldPageYOffset' '如果你绝对想忽略最初的'scroll'事件 –

0

当然,直到加载后才加载。使其成为500毫秒的睡眠呼叫。

+0

它不是,上面的代码加载在'jQuery(document).ready(function($){ ' –

+0

添加到示例代码 –

6

这是我去的解决方案。感激地收到任何改进。

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

好的解决方案!:) – Steve

3

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

许多答案建议忽略它第一次被调用,如果页面最初没有滚动,它会忽略有效的滚动。

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