Gostaria de fazer o navegador rolar a página até uma determinada âncora, apenas usando JavaScript.
Eu especifiquei um name
ou id
atributo no meu código HTML:
<a name="anchorName">..</a>
ou
<h1 id="anchorName2">..</h1>
Gostaria de obter o mesmo efeito que você navegaria para http://server.com/path#anchorName
. A página deve ser rolada para que a âncora fique perto do topo da parte visível da página.
<a href="#anchorName">link</a>
function scrollToHash(hashName) { location.hash = "#" + hashName; }
Muito mais simples:
fonte
scrollIntoViewOptions
que tem umabehavior: "smooth"
opção, mas atualmente é compatível apenas com o Firefox.Você pode usar jQuerys .animate () , .offset () e
scrollTop
. Gostarlink de exemplo: http://jsbin.com/unasi3/edit
Se você não deseja animar, use .scrollTop () como
ou javascripts nativos
location.hash
comofonte
<h1 id="anchorName">
ou um<a name="anchorName">
, use$('#'+hash+',a[name='+hash+']')
ou ligeiramente otimizado,$(document.getElementById(hash) || 'a[name='+hash+']')
que procurará o elemento pelo ID primeiro e recorrerá à busca do a apenas se um não for encontrado.$("#selector")
é otimizado, mas$("#selector,a[name='selector']")
não passará pelas mesmas otimizações o mais rápido possível. Suponho que meu comentário de 2,5 anos seja um pouco estranho. A "otimização" está evitando aa[name='selector']
pesquisa se encontrar o ID, não otimizando a pesquisa pelo ID.Ótima solução da jAndy, mas o bom scroll parece estar tendo problemas ao trabalhar no firefox.
Escrever dessa maneira também funciona no Firefox.
fonte
2018-2020 Pure js:
Existe uma maneira muito conveniente de rolar para o elemento:
Mas, tanto quanto eu entendo, ele não tem um apoio tão bom quanto as opções abaixo.
Saiba mais sobre o método
Se for necessário que o elemento esteja no topo:
Exemplo de demonstração no Codepen
Se você deseja que o elemento esteja no centro:
Exemplo de demonstração no Codepen
Apoio, suporte:
Eles escrevem que
scroll
é o mesmo método quescrollTo
, mas o suporte mostra melhorscrollTo
.Mais sobre o método
fonte
Uma solução javascript pura sem JQuery. Testado no Chrome e Ie, não testado no IOS
demo: https://jsfiddle.net/jd7q25hg/12/
fonte
Em 2018, você não precisa do jQuery para algo simples como este. O
scrollIntoView()
método interno suporta um "behavior
propriedade " para rolar suavemente para qualquer elemento da página. Você pode até atualizar o URL do navegador com um hash para torná-lo favorito.A partir deste tutorial sobre rolagem HTML Bookmarks , aqui é uma maneira nativa para adicionar rolagem suave para todos os links de âncora em sua página automaticamente:
fonte
Role suavemente para a posição correta (2019)
Obtenha a
y
coordenada correta e usewindow.scrollTo({top: y, behavior: 'smooth'})
Com deslocamento
scrollIntoView
também é uma boa opção, mas pode não funcionar perfeitamente em alguns casos. Por exemplo, quando você precisar de deslocamento adicional . ComscrollTo
você, basta adicionar esse deslocamento assim:fonte
css html { scroll-behavior: smooth; }
fonte
A solução do CSS-Tricks não funciona mais no jQuery 2.2.0. Irá gerar um erro de seletor:
Corrigi-o alterando o seletor. O trecho completo é este:
fonte
A maioria das respostas é desnecessariamente complicada.
Se você quiser apenas pular para o elemento de destino, não precisa de JavaScript:
Se você quiser rolar animadamente para o alvo , consulte a resposta de @ Shahil.
fonte
Isso funciona:
https://jsfiddle.net/68pnkfgd/
Basta adicionar a classe 'scroll' a todos os links que você deseja animar
fonte
Este é um script de trabalho que irá rolar a página até a âncora. Para configurar, apenas dê ao link da âncora um ID que corresponda ao atributo name da âncora para a qual você deseja rolar.
fonte
Eu sei que essa pergunta é realmente antiga, mas eu encontrei uma solução jQuery fácil e simples em CSS-Tricks . Esse é o que estou usando agora.
fonte
fonte
uma solução vue2 ... adicione propriedade de dados simples para simplesmente forçar a atualização
fonte
a maneira mais fácil de fazer o navegador rolar a página para uma determinada âncora é digitando seu style.css * {scroll-behavior: smooth;} e na sua navegação html use #NameOfTheSection
fonte