有没有办法阻止$(window).scroll()
在页面加载时触发?
在Firefox 4中测试以下代码,即使在拔下鼠标时也会触发。
jQuery(document).ready(function($){
$(window).scroll(function(){
console.log("Scroll Fired");
});
});
有没有办法阻止$(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提供了一个跨浏览器的选择。
这几乎就在那里,我简直就是需要防止第一次运行! –
@Mild Fuzz:如果你解释你想要达到的目标而不是你想达到目标的方式,你会得到更好的答案。认为忽略第一个滚动事件对你来说是最好的解决方案,但这可能不是这种情况(并且不可能告诉你是否不提供更多信息)。无论哪种方式,你也可以用'window.pageYOffset'来初始化'oldPageYOffset' '如果你绝对想忽略最初的'scroll'事件 –
当然,直到加载后才加载。使其成为500毫秒的睡眠呼叫。
它不是,上面的代码加载在'jQuery(document).ready(function($){ ' –
添加到示例代码 –
这是我去的解决方案。感激地收到任何改进。
var scroll = 0;
$(window).scroll(function(){
if (scroll>0){
console.log("Scroll Fired");
}
scroll++;
});
好的解决方案!:) – Steve
仅当刷新滚动的页面或直接导航到锚点时,滚动事件才会在每次加载时触发。
许多答案建议忽略它第一次被调用,如果页面最初没有滚动,它会忽略有效的滚动。
//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>
你在哪里需要防止滚动任何的例子吗? – genesis
我只需要防止在没有滚动发生时触发滚动事件。 –
当心挂钩窗口滚动事件http://ejohn.org/blog/learning-from-twitter/ – redsquare