因为我有一个锚,我在我的页面中间。我还有一个窗口滚动事件:
$(window).scroll(function(){
});
刷新页面时,会触发滚动事件。有没有办法在刷新时阻止这种情况,但在用户滚动时仍然会监听滚动事件?
答案 0 :(得分:3)
我相信只有在刷新页面并滚动页面时才会触发滚动代码。那是因为浏览器会重新加载页面,然后滚动到原始位置。
Arnelle建议的解决方案效果不佳,因为只有在刷新页面时滚动事件才会触发滚动事件。
黑客警报
我发现确实有效的是等待设置滚动处理程序。小心,我使用的魔法数字可能不适用于所有连接。
//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>
是的,我知道我对Arnelle说他们在没有理解的情况下修补了一个问题,我在这里,建议一个补丁。唯一的区别是我认为我理解这个问题。
我对OP的主要问题是。如果多次调用,我编写的大多数滚动处理程序工作正常,处理程序被称为额外时间的问题是什么?
答案 1 :(得分:1)
您可以使用标志变量来检测滚动事件是否是初始滚动事件,有效地停止回调函数在页面重新加载时对滚动事件的执行。
var initialScrollEvent = true;
$(window).scroll(function() {
if (!initialScrollEvent) {
// callback function body
}
initialScrollEvent = false;
});