如何获取和设置当前网页滚动位置?

xyz*_*xyz 109 html javascript

如何获取和设置当前网页滚动位置?

我有一个很长的表单,需要根据用户操作/输入进行刷新.当发生这种情况时,页面会重置到最顶层,这对用户来说很烦人,因为他们必须向下滚动到他们所处的位置.

如果我可以在页面重新加载之前捕获当前滚动位置(在隐藏的输入中),我可以在重新加载后将其设置回来.

tob*_*bek 129

当前接受的答案不正确 - document.documentElement.scrollTop始终在Chrome上返回0.这是因为WebKit body用于跟踪滚动,而Firefox和IE使用html.

要获得当前位置,您需要:

document.documentElement.scrollTop || document.body.scrollTop
Run Code Online (Sandbox Code Playgroud)

您可以将当前位置设置为1000px,如下所示:

document.documentElement.scrollTop = document.body.scrollTop = 1000;
Run Code Online (Sandbox Code Playgroud)

或者,使用jQuery(当你在它时动画它!):

$("html, body").animate({ scrollTop: "1000px" });
Run Code Online (Sandbox Code Playgroud)

  • gyo的回答,如果你使用`window.scrollBy()`或`window.scrollTo()`方法,建议`window.pageYOffset`更干净. (3认同)

SLa*_*aks 98

你正在寻找这家document.documentElement.scrollTop酒店.

  • 我发现,至少在Ubuntu上的Chrome上,`document.documentElement.scrollTop`总是返回0."document.body.scrollTop`然而,似乎有效.另一方面,Ubuntu上有一个Firefox,反之亦然 - 你用`body`获得0,用`documentElement`得到正确的数量.知道是什么给出的吗? (43认同)
  • 这个答案并不准确,因为`scrollTop`属性不适用于所有浏览器.检查`window.pageXOffset`和`window.pageYOffset`以获得更好的结果. (11认同)

gyo*_*gyo 24

浏览器如何显示当前窗口滚动坐标存在一些不一致之处.MaciOS上的谷歌浏览器似乎总是在使用或jQuery 时返回.0document.documentElement.scrollTop$(window).scrollTop()

但是,它与以下内容一致:

// horizontal scrolling amount
window.pageXOffset

// vertical scrolling amount
window.pageYOffset
Run Code Online (Sandbox Code Playgroud)


AXE*_*abs 5

我使用了HTML5本地存储解决方案...我的所有链接都调用了一个函数,它在更改window.location之前设置了它.

localStorage.topper = document.body.scrollTop;
Run Code Online (Sandbox Code Playgroud)

并且每个页面都在body的onLoad中:

  if(localStorage.topper > 0){ 
    window.scrollTo(0,localStorage.topper);
  }
Run Code Online (Sandbox Code Playgroud)

  • 使用localStorage的setItem()和getItem()会更优雅,而是在每次链接点击时备份滚动位置,在离开页面时存储一次:window.addEventListener("beforeunload",function(){localStorage. setItem("scrolly",document.documentElement.scrollTop || document.body.scrollTop);}); (3认同)