Lendo os documentos do AngularJS , não descobri se $anchorScroll
pode haver uma opção de duração / atenuação para rolar suavemente para os elementos.
Diz apenas:
$location.hash('bottom');
// call $anchorScroll()
$anchorScroll();
Não uso o jquery e não quero; ainda existe uma maneira inteligente, mas simples de fazer ou estender a $anchorScroll
fim de tornar a rolagem mais suave?
fonte
<a anchor-smooth-scroll>About 1</a> <a anchor-smooth-scroll>About 2</a>
<div id="my-div">my div</div>
) e, em seguida, criar um link como este:<a anchor-smooth-scroll="my-div">visit my div</a>
.Você também pode usar a rolagem angular, link " https://github.com/durated/angular-scroll/ ". É uma rolagem suave e também algumas funções de atenuação para obter uma aparência profissional.
fonte
A resposta de Brett funcionou muito bem para mim. Fiz algumas pequenas mudanças em sua solução em termos de modularização e testabilidade.
Aqui está outro exemplo de trabalho no JsFiddle que inclui a outra versão com testes incluídos.
Para teste, estou usando Karma e Jasmine. A assinatura foi ligeiramente modificada da seguinte forma:
Onde element é um atributo obrigatório para o qual rolar e speed é opcional onde o padrão é 20 (como era antes).
fonte
Você também pode usar ngSmoothScroll, link: https://github.com/d-oliveros/ngSmoothScroll .
Basta incluir o
smoothScroll
módulo como uma dependência e usá-lo assim:<a href="#" scroll-to="my-element-3">Click me!</a>
fonte
Nenhuma das soluções aqui realmente faz o que o OP pediu originalmente, ou seja, torna a
$anchorScroll
rolagem suave. A diferença entre as diretivas de rolagem suave e$anchroScroll
é que ela usa / modifica$location.hash()
, o que pode ser desejável em alguns casos.Aqui está a essência do módulo simples que substitui a rolagem $ anchorScroll por rolagem suave. Ele usa a biblioteca https://github.com/oblador/angular-scroll para a própria rolagem (substitua-a por outra se quiser, deve ser fácil).
https://gist.github.com/mdvorak/fc8b531d3e082f3fdaa9
Nota: Na verdade, não faz $ anchorScroll rolar suavemente, mas substitui seu manipulador para rolagem.
Habilite-o simplesmente referenciando o
mdvorakSmoothScroll
módulo em seu aplicativo.fonte
Alan, obrigado. Se alguém estiver interessado, eu formatei com base nos padrões John Pappa.
fonte
Não sei como animar
$anchorScroll
. É assim que faço em meus projetos:E a função JS:
fonte