参见英文答案 > Prevent automatic browser scroll on refresh 7个
所以,现在大多数浏览器会在页面刷新时自动重新定位窗口滚动,这通常很好,但我有一种情况需要重新加载页面并专注于用户离开的页面的不同部分.注意,获取焦点的新元素从隐藏开始,因此散列将无效.我需要在JS中处理它,所以我可以使div可见,等等.
重载后调用…
$(document).ready(function(){
$('#mydiv').show();
var top = $('#myelement').offset().top;
window.scrollTo(0, top);
});
尽管如此,该页面还是关注用户离开页面的位置.经过大量调试后,在我看来代码运行得很好,但浏览器正在处理重新加载事件,并重新定位我新定位的滚动…它瞬间发生,但如果我刚刚发出警报我的滚动,它显示了正确的屏幕位置.在解除警报后,浏览器会将滚动条跳回到IT认为它应该到达的位置(至少在Chrome中它是这样).
我的问题是,有什么方法可以阻止浏览器(跨浏览器)处理重载事件?延迟我的滚动延迟似乎工作,但它看起来非常不专业和跳跃.
我试过了
$(document).unbind("scroll");
正如我在这里看到的那样推荐,但它没有做任何事情.
在此先感谢您的帮助.
解决方法:
这是一个适用于FF(18),Chrome(24)和IE(9)的解决方案.
将以下内容放在文档头部的脚本中:
function autoScroll() {
var div = document.getElementById("mydiv");
div.style.display = '';
var top = div.offsetTop;
if(window.scrollTop != top)
window.scrollTo(0, top);
}
function loadAutoScroll() {
autoScroll();
window.onload = null;
return false;
}
function scrollAutoScroll() {
autoScroll();
window.setTimeout(function(){ window.onscroll = null; }, 100);
return false;
}
window.onload = loadAutoScroll;
window.onscroll = scrollAutoScroll;
我相信可以推出更清洁的解决方案.