En lisant les documents AngularJS, je n'ai pas compris si $anchorScroll
je peux avoir une option de durée / accélération pour faciliter le défilement vers les éléments.
Il dit seulement:
$location.hash('bottom');
// call $anchorScroll()
$anchorScroll();
Je n'utilise pas jquery et je ne veux pas; Existe-t-il encore un moyen intelligent mais simple de créer ou d'étendre $anchorScroll
afin de rendre le défilement plus fluide?
la source
<a anchor-smooth-scroll>About 1</a> <a anchor-smooth-scroll>About 2</a>
<div id="my-div">my div</div>
), puis créer un lien comme celui - ci:<a anchor-smooth-scroll="my-div">visit my div</a>
.Vous pouvez également utiliser le lien angular-scroll, " https://github.com/dured/angular-scroll/ ". C'est un défilement fluide et quelques fonctions d'accélération pour obtenir un look professionnel.
la source
La réponse de Brett a très bien fonctionné pour moi. J'ai fait quelques petits changements sur sa solution en termes de modularisation et de testabilité.
Voici encore un autre exemple de travail sur JsFiddle qui inclut l'autre version avec tests inclus.
Pour les tests, j'utilise Karma et Jasmine. La signature a été légèrement modifiée comme suit:
Où l'élément est un attribut obligatoire vers lequel faire défiler et la vitesse est facultative où la valeur par défaut est 20 (comme avant).
la source
Vous pouvez également utiliser ngSmoothScroll, lien: https://github.com/d-oliveros/ngSmoothScroll .
Incluez simplement le
smoothScroll
module en tant que dépendance et utilisez-le comme ceci:<a href="#" scroll-to="my-element-3">Click me!</a>
la source
Aucune des solutions présentées ici ne fait réellement ce que OP demandait à l'origine, c'est-à-dire un
$anchorScroll
défilement fluide. La différence entre les directives de défilement lisse$anchroScroll
est qu'il utilise / modifie$location.hash()
, ce qui peut être souhaitable dans certains cas.Voici l'essentiel du module simple qui remplace le défilement $ anchorScroll par un défilement fluide. Il utilise la bibliothèque https://github.com/oblador/angular-scroll pour le défilement lui-même (remplacez-le par autre chose si vous le souhaitez, cela devrait être facile).
https://gist.github.com/mdvorak/fc8b531d3e082f3fdaa9
Remarque: En fait, il ne permet pas à $ anchorScroll de défiler en douceur, mais il remplace son gestionnaire pour le défilement.
Activez-le simplement en référençant le
mdvorakSmoothScroll
module dans votre application.la source
Alan, merci. Si quelqu'un est intéressé, je l'ai formaté sur la base des normes John Pappa.
la source
Je ne sais pas comment animer
$anchorScroll
. Voici comment je le fais dans mes projets:Et la fonction JS:
la source