Se você for para uma página a e rolar ao redor, então a atualização da página será atualizada no local onde você a deixou. Isso é ótimo, mas também ocorre em páginas onde há um local de âncora no url. Um exemplo seria se você clicasse em um link http://example.com/post/244#comment5
e atualizasse a página depois de olhar ao redor, você não estaria na âncora e a página saltasse. Existe alguma maneira de evitar isso com javascript? Para que não importe o que você sempre navegue até a âncora.
javascript
browser
ThomasReggi
fonte
fonte
Respostas:
Esta solução não é mais recomendada devido a mudanças no comportamento do navegador. Veja outras respostas.
Basicamente, se uma âncora for usada, nos vinculamos ao evento windows scroll. A ideia é que o primeiro evento de scroll pertença ao reposicionamento automático feito pelo navegador. Quando isso ocorre, fazemos nosso próprio reposicionamento e removemos o evento vinculado. Isso evita que as rolagens de página subsequentes prejudiquem o sistema.
fonte
No Chrome, mesmo se você forçar scrollTop para 0, ele pulará depois do primeiro evento de rolagem.
Você deve vincular o pergaminho a este:
Portanto, o navegador é enganado para acreditar que estava no início antes da atualização.
fonte
window.onbeforeunload = function(){ window.scrollTo(0,0); }
Para desativar a restauração automática de rolagem, basta adicionar esta tag à seção principal.
Não é compatível com o IE. Compatibilidade do navegador.
fonte
Depois de várias falhas, finalmente consegui fazer o truque. anzo está correto aqui, pois o uso
beforeunload
fará a página saltar para o topo quando um usuário recarregar a página ou clicar em um link. Assimunload
é a maneira clara de fazer isso.Jeito Javascript (Obrigado ProfNandaa ):
EDITAR: 16/07/2015
O problema do salto ainda está lá com o Firefox, mesmo com
unload
eventos.fonte
beforeunload
solução porque evita pular para o topo da página em recarregamentos e cliques de âncora.Aqui está uma abordagem mais geral. Em vez de tentar evitar que o navegador role (ou pule para o topo, como deveria), apenas restauro a posição anterior na página. Ou seja, estou gravando o deslocamento y atual da página em localStorage e role para esta posição assim que a página for carregada.
fonte
Você pode simplesmente colocar um # no final para que a página carregue no topo.
Funciona em todos os navegadores, mobile e desktop, porque é muito simples.
});
// Isso carrega a página com um # no final.
fonte
Isso funciona para mim.
fonte
Você deveria ser capaz.
Onload, verifique se
window.location.hash
tem um valor. Em caso afirmativo, pegue o elemento com um id que corresponda ao valor de hash. Encontre a posição do elemento (chamadas recursivas para offsetTop / offsetLeft) e, em seguida, passe esses valores para owindow.scrollTo(x, y)
método.Isso deve rolar a página até o elemento desejado.
fonte