Chcę płynnie przewijać w dół. Nie chcę do tego pisać funkcji - szczególnie jeśli jQuery już ją ma.
javascript
jquery
Bryan Field
źródło
źródło
html
ibody
? Jest tu pewien wgląd: stackoverflow.com/questions/2123690/… , ale nie jest to pełna odpowiedź.<html>
maoverflow-x:hidden;
to ożywione nie będzie działać. (Nie może pracować dlaoverflow-y:hidden
, ioverflow:hidden
, ale nie testowałem.body
działał w Chrome na początku tego roku, ale teraz musi tak byćhtml
.Odpowiedź Nicka działa świetnie. Zachowaj ostrożność przy określaniu funkcji complete () wewnątrz wywołania animate (), ponieważ zostanie ona wykonana dwukrotnie, ponieważ zadeklarowano dwa selektory (html i body).
Oto jak uniknąć podwójnego oddzwaniania.
źródło
die()
funkcji przedlive()
wywołaniem funkcji. Gwarantuje to, że Twój przewodniklive()
zostanie wywołany tylko raz.Odpowiedź Nicka działa świetnie, a ustawienia domyślne są dobre, ale możesz pełniej kontrolować przewijanie, wykonując wszystkie ustawienia opcjonalne.
oto jak to wygląda w interfejsie API:
więc możesz zrobić coś takiego:
tutaj jest strona interfejsu API funkcji jQuery .animate: http://api.jquery.com/animate/
źródło
Jak wspomniała Kita, istnieje problem z uruchamianiem wielu wywołań zwrotnych, gdy animujesz zarówno „html”, jak i „body”. Zamiast animować oba i blokować kolejne wywołania zwrotne, wolę użyć niektórych podstawowych funkcji wykrywania i animować tylko właściwość scrollTop pojedynczego obiektu.
Zaakceptowana odpowiedź w tym drugim wątku daje pewien wgląd w właściwość scrollTop obiektu, którą powinniśmy spróbować animować: pageYOffset Scrolling and Animation w IE8
AKTUALIZACJA - - -
Powyższa próba wykrycia funkcji kończy się niepowodzeniem. Wygląda na to, że nie ma jednego wiersza sposobu, ponieważ właściwość pageYOffset w przeglądarkach typu webkit zawsze zwraca zero, gdy występuje typ dokumentu. Zamiast tego znalazłem sposób na skorzystanie z obietnicy wykonania pojedynczego wywołania zwrotnego za każdym razem, gdy animacja zostanie wykonana.
źródło
Mam coś, co uważam za lepsze rozwiązanie niż
$('html, body')
hack.Nie jest to jedna linijka, ale miałem problem z
$('html, body')
tym, że jeśli zalogujesz się$(window).scrollTop()
podczas animacji, zobaczysz, że wartość przeskakuje wszędzie, czasem o setki pikseli (chociaż nie widzę czegoś takiego dzieje się wizualnie). Potrzebowałem, aby wartość była przewidywalna, aby móc anulować animację, jeśli użytkownik złapie pasek przewijania lub zakręci kółko myszy podczas automatycznego przewijania.Oto funkcja sprawnie animująca przewijanie:
Poniżej znajduje się bardziej złożona wersja, która anuluje animację podczas interakcji użytkownika, a także odświeża ją aż do osiągnięcia wartości docelowej, co jest przydatne, gdy próbujesz ustawić scrollTop natychmiast (np. Po prostu dzwoniąc
$(window).scrollTop(1000)
- z mojego doświadczenia, to nie działa 50% czasu.)źródło
Miałem problemy, w których animacja zawsze zaczynała się od góry strony po odświeżeniu strony w innych przykładach.
Naprawiłem to, nie animując bezpośrednio css, ale raczej wzywając
window.scrollTo();
na każdym kroku:To również
html
omijabody
problem vs, ponieważ używa JavaScript w przeglądarce.Zajrzyj na http://james.padolsey.com/javascript/fun-with-jquerys-animate/, aby uzyskać więcej informacji o tym, co możesz zrobić z funkcją animacji jQuery.
źródło
Możesz użyć animacji jQuery do przewijania strony o określonym czasie trwania:
gdzie 1024px to przesunięcie przewijania, a 5000 to czas trwania animacji w milisekundach.
źródło
$("html, body").animate({scrollTop: 1024}, 5000);
również działa.Wypróbuj wtyczkę scrollTo .
źródło
źródło
Jeśli chcesz przejść na koniec strony (nie musisz przewijać w dół), możesz użyć:
źródło
Ale jeśli naprawdę chcesz dodać animację podczas przewijania, możesz wypróbować moją prostą wtyczkę ( AnimateScroll ), która obecnie obsługuje ponad 30 stylów łagodzenia
źródło
kod przeglądarki jest następujący:
jest bez animacji, ale działa wszędzie
źródło