Eu tenho alguns hiperlinks na minha página. Uma FAQ que os usuários lerão quando visitarem minha seção de ajuda.
Usando os links da âncora, posso fazer a página rolar em direção à âncora e guiar os usuários até lá.
Existe uma maneira de tornar essa rolagem suave?
Mas observe que ele está usando uma biblioteca JavaScript personalizada. Talvez o jQuery ofereça algo como este cozido?
Respostas:
Atualização em abril de 2018: agora existe uma maneira nativa de fazer isso :
No momento, isso é suportado apenas nos navegadores mais modernos.
Para suporte mais antigo ao navegador, você pode usar esta técnica jQuery:
E aqui está o violino: http://jsfiddle.net/9SDLw/
Se o seu elemento de destino não tiver um ID e você estiver vinculando a ele por ele
name
, use o seguinte:Para aumentar o desempenho, você deve armazenar em cache esse
$('html, body')
seletor, para que ele não seja executado toda vez que uma âncora for clicada:Se você deseja que o URL seja atualizado, faça-o no
animate
retorno de chamada:fonte
scrollTop: $(this.hash).offset().top
vez descrollTop: $(this.href).offset().top
?scrollTop: $(href).offset().top - 72
html, body
objeto aqui é desnecessário, executar um seletor uma vez por clique não é muito.A sintaxe correta é:
Simplificando : DRY
Explicação de
href*=\\#
:*
significa que ele corresponde ao que contém#
char. Assim, combine apenas as âncoras . Para saber mais sobre o significado disso, veja aqui\\
é porque o#
é um caractere especial no seletor de css, então temos que escapar dele.fonte
$('a')
para$('a[href*=#]')
servir apenas urls âncora<a href="javascript:$('#test').css('background-color', '#000')">Test</a>
. Você deve usar$('a[href^=#]')
para combinar todos os URLs que começam com um caractere de hash.a[href^=\\#]
A nova gostosura do CSS3. Isso é muito mais fácil do que todos os métodos listados nesta página e não requer Javascript. Basta digitar o código abaixo no seu css e, de repente, os links apontam para os locais dentro da sua própria página e terão uma animação de rolagem suave.
Depois disso, os links apontados para uma div deslizarão suavemente para essas seções.
Edit: Para aqueles confusos sobre o tag acima. Basicamente, é um link clicável. Você pode ter outra tag div em algum lugar da sua página da web, como
Nesse sentido, o link a será clicável e irá para qualquer que seja a seção #s nesse caso, é a nossa div que chamamos seção.
BTW, passei horas tentando fazer isso funcionar. Encontrei a solução em alguma seção de comentários obscuros. Era um buggy e não funcionava em algumas tags. Não funcionou no corpo. Finalmente funcionou quando o coloquei em html {} no arquivo CSS.
fonte
isso funcionou perfeito para mim
fonte
Estou surpreso que ninguém postou uma solução nativa que também cuida de atualizar o hash do local do navegador para corresponder. Aqui está:
Consulte o tutorial: http://www.javascriptkit.com/javatutors/scrolling-html-bookmark-javascript.shtml
Para sites com cabeçalhos fixos, o
scroll-padding-top
CSS pode ser usado para fornecer um deslocamento.fonte
Somente CSS
Tudo o que você precisa adicionar apenas isso. Agora seu comportamento de rolagem de links internos será suave como um fluxo de fluxo.
Nota : Todos os navegadores mais recentes (
Opera
,Chrome
,Firefox
etc) suporte a esse recurso.para obter detalhes, leia este artigo
fonte
Eu sugiro que você faça esse código genérico:
Você pode ver um artigo muito bom aqui: jquery-effet-smooth-scroll-defilement-fluide
fonte
Oficial: http://css-tricks.com/snippets/jquery/smooth-scrolling/
fonte
Já existem muitas respostas boas aqui - no entanto, todas elas estão faltando o fato de que as âncoras vazias precisam ser excluídas . Caso contrário, esses scripts gerarão erros de JavaScript assim que uma âncora vazia for clicada.
Na minha opinião, a resposta correta é assim:
fonte
Usando JQuery:
fonte
Há suporte nativo para rolagem suave em rolagens de hash id.
Você pode dar uma olhada: https://www.w3schools.com/howto/howto_css_smooth_scroll.asp#section2
fonte
A resposta dada funciona, mas desativa os links de saída. Abaixo, uma versão com um bônus adicional facilita a saída (swing) e respeita os links de saída.
fonte
stop()
entanto, a migalha de URL não funciona como esperado: o botão Voltar não retorna, isso ocorre quando a migalha é definida na URL após a conclusão da animação. É melhor sem uma migalha no URL, por exemplo, é assim que o airbnb faz.HTML
ou com URL completo absoluto
jQuery
fonte
Os navegadores modernos estão um pouco mais rápidos atualmente. Um setInterval pode funcionar. Esta função funciona bem no Chrome e Firefox atualmente (um pouco lento no safari, não se incomodou com o IE)
fonte
Existe uma maneira CSS de fazer isso usando o comportamento de rolagem. Adicione a seguinte propriedade.
E é isso. Não é necessário JS.
PS: verifique a compatibilidade do navegador.
fonte
Adicionando isso:
está de alguma forma anulando o deslocamento vertical
no Firefox e IE, não no Chrome. Basicamente, a página rola suavemente até o ponto em que deve parar com base no deslocamento, mas depois pula para onde a página iria sem o deslocamento.
Ele adiciona o hash ao final do URL, mas pressionar para trás não o leva de volta ao topo, apenas remove o hash do URL e deixa a janela de visualização onde fica.
Aqui está o js completo que estou usando:
fonte
Esta solução também funcionará para os seguintes URLs, sem quebrar os links âncora para páginas diferentes.
etc.
Ainda não testei isso em todos os navegadores.
fonte
Isso facilitará o jQuery discernir o hash de destino e saber quando e onde parar.
fonte
fonte
Código testado e verificado
fonte
Eu fiz isso para as âncoras href "/ xxxxx # asdf" e "#asdf"
fonte
Aqui está a solução que eu implementei para vários links e âncoras, para uma rolagem suave:
http://www.adriantomic.se/development/jquery-localscroll-tutorial/ se você tiver seus links de navegação configurados em uma divisão de navegação e declarados com esta estrutura:
e seus destinos de tag de âncora correspondentes da seguinte maneira:
Em seguida, basta carregar isso no cabeçalho do documento:
Obrigado a @Adriantomic
fonte
Se você tiver um botão simples na página para rolar para baixo até uma div e quiser que o botão voltar funcione pulando para o topo, basta adicionar este código:
Isso também pode ser estendido para pular para divs diferentes, lendo o valor do hash e rolando como Joseph Silbers responde.
fonte
Nunca esqueça que a função offset () está dando a posição do seu elemento para documentar. Portanto, quando você precisar rolar seu elemento em relação ao pai, use isso;
O ponto principal é obter o scrollTop de scroll-div e adicioná-lo ao scrollTop. Se você não fizer essa função position (), sempre fornecerá valores de posição diferentes.
fonte
Você pode usar
window.scroll()
combehavior: smooth
etop
definir a parte superior deslocada da marca de âncora, o que garante que a marca de âncora esteja na parte superior da janela de visualização.Demo:
Mostrar snippet de código
Você pode simplesmente definir a propriedade CSS
scroll-behavior
comosmooth
(suportada pela maioria dos navegadores modernos), o que evita a necessidade de Javascript.Mostrar snippet de código
fonte
obrigado por compartilhar, Joseph Silber. Aqui, sua solução de 2018 como ES6 com uma pequena alteração para manter o comportamento padrão (role para cima):
fonte
Requer jquery e anima para ancorar a tag com o nome especificado em vez de id, enquanto adiciona o hash ao URL do navegador. Também corrige um erro na maioria das respostas com jquery, onde o sinal # não é prefixado com uma barra invertida de escape. O botão voltar, infelizmente, não retorna corretamente aos links hash anteriores ...
fonte