Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery Javascript scrollTop在Chrome上无法按预期工作以恢复滚动条位置_Javascript_Jquery - Fatal编程技术网

jQuery Javascript scrollTop在Chrome上无法按预期工作以恢复滚动条位置

jQuery Javascript scrollTop在Chrome上无法按预期工作以恢复滚动条位置,javascript,jquery,Javascript,Jquery,我使用以下jQuery Javascript在卸载事件之前保存滚动条位置并再次应用它: $(document).ready(function () { document.documentElement.scrollTop = $.cookie("scroll") || 0; }); window.onbeforeunload = function () { $.cookie("scroll", document.documentElement.scrollTop, { expi

我使用以下jQuery Javascript在卸载事件之前保存滚动条位置并再次应用它:

$(document).ready(function () {
    document.documentElement.scrollTop = $.cookie("scroll") || 0;
});

window.onbeforeunload = function () {
    $.cookie("scroll", document.documentElement.scrollTop, { expires: 7 });
}
基本上,我有一系列的链接刷新页面,我希望浏览器恢复滚动条的位置。注意,我不能在这个实例中使用AJAX。它在Firefox中非常有效。但是,在Chrome和Safari中,它仅在刷新浏览器窗口时有效,而在单击链接刷新页面时无效。这就好像点击链接没有被识别为onbeforeunload

我尝试修改代码,使用单击事件设置滚动cookie,如下所示,但没有成功:

$(document).ready(function () {
    document.documentElement.scrollTop = $.cookie("scroll") || 0;
});

$('a.lockscrollbar').click(function() {
    $.cookie("scroll", document.documentElement.scrollTop, { expires: 7 });
}
仅供参考,我正在使用jQuery1.4.2和jQuerycookie插件

有什么想法吗?

在Chrome和Safari中滚动
,效果不是很好,或者根本不可能。我不知道为什么,但我通过使用嵌套在

中的
修复了它。这是我使用的代码(虽然我正在处理的站点仍处于构建阶段,但它可以正常工作):


当滚动的对象是“html”时,Webkit不会滚动到顶部,所以首先我检查浏览器类型(在你说之前,我知道jQuery.support会更好,就像我在构建阶段说的那样)。webkit以外的浏览器接受“html”选择器,所以我对所有其他浏览器都使用它(令人烦恼的是,在Opera中使用“html”而不是Chrome,在Chrome中使用“body”而不是Opera…!)。

在Chrome 10之前,这种用法就像一种魅力。。。现在它似乎只在Firefox中起作用(有人在IE9中测试过吗?)


这是一篇较老的帖子,但我对Chrome20也有同样的问题。使用jQuery 1.7.1,这对我来说很有效:

$(window).on('load', function(){
    $('html body').scrollTop(0);
});

您可以在buyometric.co.uk/test.php上看到该问题的演示。如果你点击Chrome中的任何“4”链接,你将返回到页面顶部。如果刷新浏览器,滚动条的位置会被重新调用。奇怪的是,在刷新窗口时,滚动条工作得很好,但不会跟随链接。我开始认为,在这种情况下,onbeforeunload和ScrollTop是有问题的。好吧,调查一下你的核心内容,但你可能想看看是否将所有页面内容包装在另一个
,然后滚动,而不是
,会产生不同。我无法让Chrome 12实现这一点,不过它在Safari中可以工作。好的,我找到了setter的“html”或“body”修复程序(取决于浏览器)getter的window…这个修改版本在chrome52.0.2743.116和FF48上对我有效:var y=$(window.scrollTop()$('html,body').animate({scrollTop:0},'slow');
var y = $(window).scrollTop();
$('html, body').animate({scrollTop:(y + 50)}, 1000);
$(window).on('load', function(){
    $('html body').scrollTop(0);
});