Como posso obter e definir a posição atual de rolagem da página da web?
Tenho um formulário longo que precisa ser atualizado com base nas ações / entradas do usuário. Quando isso acontece, a página é redefinida para o topo, o que é irritante para os usuários, porque eles precisam rolar para baixo até o ponto em que estavam.
Se eu pudesse capturar a posição de rolagem atual (em uma entrada oculta) antes de recarregar a página, poderia configurá-la novamente depois de recarregar.
javascript
html
xyz
fonte
fonte
Respostas:
Você está procurando a
document.documentElement.scrollTop
propriedade.fonte
getScrollingPosition()
para armazenar os valores em variáveis ocultas. Então, no html da página atualizada que uso<body onLoad="window.scrollTo(x,y)
, onde x e y são os valores dos valores ocultos!document.documentElement.scrollTop
sempre retorna 0.document.body.scrollTop
, no entanto, parece funcionar. Um Firefox no Ubuntu, por outro lado, o inverso é verdadeiro - você obtém 0 combody
e a quantidade correta comdocumentElement
. Alguma ideia do que dá?scrollTop
propriedade não funciona em todos os navegadores. Verifiquewindow.pageXOffset
ewindow.pageYOffset
para melhores resultados.A resposta aceita atualmente está incorreta -
document.documentElement.scrollTop
sempre retorna 0 no Chrome. Isso ocorre porque o WebKit usabody
para controlar a rolagem, enquanto o Firefox e o IE usamhtml
.Para obter a posição atual, você deseja:
Você pode definir a posição atual para 1000 px na página, desta forma:
Ou, usando jQuery (anime enquanto você está nisso!):
fonte
window.pageYOffset
é mais limpo se você estiver usando métodoswindow.scrollBy()
ouwindow.scrollTo()
.Existem algumas inconsistências em como os navegadores expõem as coordenadas de rolagem da janela atual. O Google Chrome no Mac e iOS parece sempre retornar
0
ao usardocument.documentElement.scrollTop
ou jQuery$(window).scrollTop()
.No entanto, funciona de forma consistente com:
fonte
Eu optei pela solução de armazenamento local HTML5 ... Todos os meus links chamam uma função que define isso antes de alterar window.location:
e cada página tem isso no onLoad do corpo:
fonte