有没有办法禁用某些现代浏览器(Chrome 和 Safari)在页面刷新时记住您的滚动位置的行为?
问问题
22306 次
6 回答
41
对于支持 history.scrollRestoration 的浏览器,可以关闭自动滚动行为:
if ('scrollRestoration' in history) {
history.scrollRestoration = 'manual';
}
来源:https ://developers.google.com/web/updates/2015/09/history-api-scroll-restoration
于 2016-07-06T17:01:01.527 回答
3
你有没有试过在文件准备好后触发这个?
$(document).ready(function(){
window.scrollTo(0, 0);
});
如果这不起作用...
$(document).ready(function(){
setTimeout(function(){
window.scrollTo(0, 0);
}, 1);
});
这会将它推到调用堆栈的底部
于 2013-09-04T15:19:22.297 回答
2
不仅适用于 chrome,而且我认为这会很好用。
window.onload = function () {
window.scrollTo(0, 0);
};
更新您的问题后:
我认为如果我们使用一些 cookie 或会话存储会更好。
于 2013-09-04T15:05:37.763 回答
0
而不是希望 setTimout 最终出现在堆栈的底部 - 我宁愿强制它达到我们想要的滚动位置。我仍然认为这是一个 hack,我希望我们绑定到某种浏览器事件。
var scrollToYPos = 100;
var interval = setInterval(checkPos, 0);
function checkPos() {
if ($(window).scrollTop() == scrollToYPos) {
clearInterval(interval);
} else {
window.scrollTo( 0, scrollToYPos );
checkPos();
}
}
于 2013-09-04T15:28:59.420 回答
0
我遇到了同样的问题。这是我想出的基本解决方案:
// scroll the user to the comments section if we need to
wt = win.scrollTop();
wb = wt + win.height();
// if scroll position is 0, do this (it's a fresh user), otherwise
// the browser is likely to resume the user's scroll position, in
// which case we don't want to do this
yab.loaded().done(function() {
// it seems that browsers (consistently) set the scroll position after
// page load. Accordingly wait a 1/4 second (I haven't tested this to the lowest
// possible timeout) before triggering our logic
setTimeout(function() {
// if the window top is 0, scroll the user, otherwise the browser restored
// the users scroll position (I realize this fails if the users scroll position was 0)
if(wt === 0) {
p = self.container.offset().top;
if(wb != p) {
win.scrollTop(p - th - 20);
}
}
}, 250);
});
于 2014-02-20T01:15:36.380 回答
-3
我认为最简单的方法是欺骗浏览器重新加载它认为是一个新页面。
window.location = window.location
我在其中测试过的所有浏览器都可以始终如一地工作。我个人会远离 onload 回调,因为它们可能会导致加载过程中的跳跃在视觉上不太吸引人。
于 2015-07-07T18:42:57.380 回答