Czytając dokumentację AngularJS , nie doszedłem do wniosku, czy $anchorScroll
można mieć opcję czasu trwania / łagodzenia, aby płynnie przewijać elementy.
Mówi tylko:
$location.hash('bottom');
// call $anchorScroll()
$anchorScroll();
Nie używam jquery i nie chcę; czy nadal istnieje sprytny, ale prosty sposób na utworzenie lub rozszerzenie $anchorScroll
, aby przewijanie było bardziej płynne?
<a anchor-smooth-scroll>About 1</a> <a anchor-smooth-scroll>About 2</a>
<div id="my-div">my div</div>
), a następnie utworzyć łącze takiego:<a anchor-smooth-scroll="my-div">visit my div</a>
.Możesz również użyć przewijania kątowego, linku „ https://github.com/durated/angular-scroll/ ”. Jest płynne przewijanie i kilka funkcji wygładzania, aby uzyskać profesjonalny wygląd.
źródło
Odpowiedź Bretta zadziałała dla mnie świetnie. Wprowadziłem kilka drobnych zmian w jego rozwiązaniu pod względem modularyzacji i testowalności.
Oto kolejny działający przykład na JsFiddle, który obejmuje drugą wersję z dołączonymi testami.
Do testów używam Karmy i Jasmine. Podpis został nieznacznie zmodyfikowany w następujący sposób:
Gdzie element jest atrybutem obowiązkowym do przewinięcia, a prędkość jest opcjonalna, gdzie wartością domyślną jest 20 (tak jak wcześniej).
źródło
Możesz również użyć ngSmoothScroll, link: https://github.com/d-oliveros/ngSmoothScroll .
Po prostu dołącz
smoothScroll
moduł jako zależność i użyj go w następujący sposób:<a href="#" scroll-to="my-element-3">Click me!</a>
źródło
Żadne z przedstawionych tutaj rozwiązań w rzeczywistości nie robi tego, o co pierwotnie prosił OP, czyli
$anchorScroll
płynnego przewijania. Różnica między dyrektywami płynnego przewijania$anchroScroll
polega na tym, że używa / modyfikuje$location.hash()
, co może być pożądane w niektórych przypadkach.Oto istota prostego modułu, który zastępuje przewijanie $ anchorScroll płynnym przewijaniem. Używa biblioteki https://github.com/oblador/angular-scroll do samego przewijania (zastąp ją czymś innym, jeśli chcesz, powinno być łatwe).
https://gist.github.com/mdvorak/fc8b531d3e082f3fdaa9
Uwaga: w rzeczywistości $ anchorScroll nie powoduje płynnego przewijania, ale zastępuje jego obsługę przewijania.
Włącz go po prostu odwołując się do
mdvorakSmoothScroll
modułu w aplikacji.źródło
Alan, dziękuję. Jeśli ktoś był zainteresowany, sformatowałem go zgodnie ze standardami Johna Pappy.
źródło
Nie wiem, jak animować
$anchorScroll
. Oto jak robię to w moich projektach:Oraz funkcja JS:
źródło