Szukam prostej animacji „przewiń do góry” w przeglądarce, którą mogę zastosować do linku. Nie chcę wymagać biblioteki JS, takiej jak jQuery / Moo itp.
// jQuery Equivilant to convert to pure JS...
$('html, body').animate({scrollTop:0}, 400);
Jestem idealnym przypadkiem dla kogoś, kto powinien nauczyć się JS w 100% przed skokiem do biblioteki. :(
javascript
Heather Hins
źródło
źródło
var something = $(...)
), odtwarzanie gazillionu obiektów w każdej funkcji (znają zmienne, ale nie wiedzą o tymvar veryBigObject = {...}
przy kilkuset właściwościach w na górze tej funkcji będzie zabijanie wydajności). I bardzo często nawet nie wiedzą, że nazwa języka to Javascript, a nie jQuery.Odpowiedzi:
Próbny:
źródło
document.documentElement
zamiastdocument.body
(chyba że ustawisz CSS:)body{height:100%;}
. Działające demo przy użyciu tej koncepcji: jsfiddle.net/S5ALP/1if (duration <= 0) return;
top.window.scroll(0, value)
zamiastelement.scrollTop = value
spowodowało, że działa zarówno w Chrome, jak i Firefox (Ubuntu). :)wygląda na to, że jest już wiele rozwiązań. w każdym razie, oto kolejny, wykorzystuje równania łagodzące.
źródło
requestAnimationFrame
requestAnimationFrame
nie jest kompatybilny ze wszystkimi przeglądarkami, niektóre telefony komórkowe, więc nie jest to rozwiązanie dynamiczne, patrz: developer.mozilla.org/en-US/docs/Web/API/window/…requestAnimationFrame
która powinna zająć się każdą niezgodnością przeglądarkiDostałem to z artykułu o płynnym przewijaniu .
W razie potrzeby dostępnych jest kilka wypełniaczy .
źródło
scrollIntoView({behavior: 'smooth'})
istnieje i mogę zrobić to, czego ludzie potrzebują w przypadku tego rodzaju problemu.Uncaught TypeError: Failed to execute 'scroll' on 'Window': No function was found that matched the signature provided.
Zmodyfikowałem odpowiedź TimWolli, aby zastosować kwadratowe łagodzenie wejścia-wyjścia (trochę płynniej :). Oto przykład w akcji: na jsFiddle . Funkcje łagodzenia są dostępne tutaj: Funkcje łagodzenia Roberta Pennera
źródło
document. documentElement
nie działa w Chrome.Bez kodu JQuery, mam nadzieję, że ci to pomoże.
wywołaj tę funkcję TopscrollTo () na zdarzeniu kliknięcia przycisku lub na dowolnym innym żądanym elemencie / zdarzeniu.
źródło
Zmodyfikowałem kod @TimWolla, aby dodać więcej opcji i kilka funkcji ruchu. Dodano także obsługę crossbrowser z document.body.scrollTop i document.documentElement.scrollTop
http://jsfiddle.net/forestrf/tPQSv/
Wersja skrócona: http://jsfiddle.net/forestrf/tPQSv/139/
źródło
1 / duration
pierwszy raz wywołujesz scrollToX?Tu jest rzeczywiście czysty sposób JavaScript, żeby to osiągnąć bez użycia
setTimeout
lubrequestAnimationFrame
czy jQuery.Krótko mówiąc, znajdź element scrollView, do którego chcesz przewinąć, i użyj scrollIntoView
el.scrollIntoView({behavior:"smooth"});
Oto plunkr .
źródło
scrollIntoViewOption
nie obsługuje wielu przeglądarek. developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoViewNa podstawie tej odpowiedzi :
Powinno to umożliwić płynne przewijanie (funkcja cosinus) z dowolnego miejsca do określonego „y”.
źródło
Nikt nie wspomniał o zachowaniu przewijania właściwości CSS
CSS
JS
źródło
KLASA SCROLLER PURE JAVASCRIPT
To stare pytanie, ale pomyślałem, że mogę odpowiedzieć na kilka fantazyjnych rzeczy i więcej opcji do zabawy, jeśli chcesz mieć nieco większą kontrolę nad animacją.
Oto czysta klasa JS, która zajmie się przewijaniem za Ciebie:
ZOBACZ DEMO W CODEPEN LUB PRZEJDŹ DO DOLNY I URUCHOM ZBIORNIK
SKRIPT PEŁNEJ KLASY + PRZYKŁAD UŻYCIA:
źródło
Łatwo.
źródło
window.scrollTo(x, y);
..scrollTop
i.scrollLeft
.*scroll
przy obliczaniu pozycji przewijania. Jednak nie widzę żadnych zaginionych;
...Właśnie stworzyłem to rozwiązanie tylko dla javascript poniżej.
Proste użycie:
Obiekt silnika (możesz majstrować przy filtrze, wartości fps):
źródło
console.warn
A parametr stringsetTimeout
nie jest odpowiedni w kodzie produkcyjnym (druga jest właściwie nieodpowiednia gdziekolwiek, ponieważ weval
zasadzie).Opierając się na niektórych odpowiedziach tutaj, ale używając prostej matematyki do płynnego przejścia za pomocą krzywej sinusoidalnej:
Stosowanie:
PS. zwróć uwagę na styl ES6
źródło
Jest to podejście przeglądarkowe oparte na powyższych odpowiedziach
źródło
difference
aperTick
?Jeszcze innym podejściem jest użycie window.scrollBy
JSFiddle
źródło
Wybrałem wersję @akai odpowiedzi @timwolla i w zamian dodałem funkcję stopAnimation, więc przed uruchomieniem nowej animacji starą można zatrzymać.
źródło
Inne podejście oparte na różnych przeglądarkach oparte na powyższym rozwiązaniu
Sztuką jest kontrolowanie faktycznej zmiany przewijania, a jeśli jest ona zerowa, zmień element przewijania.
źródło
Animacja przewijania liniowego do dołu. Czysty JS, bez JQuery. Może moje rozwiązanie będzie komuś pomocne.
Możesz zmieniać zmienne
action_count
,speed_ms
aby skonfigurować animację przewijania według własnego gustu.źródło
Skorzystaj z tego rozwiązania
Dzięki
źródło
animate()
w zasięgu okna jest jakaś funkcja ... Myślę, że źle zrozumiałeś.Element.animate()
Funkcja nie jest uznawany przez wielu przeglądarek. Zobacz developer.mozilla.org/en-US/docs/Web/API/Element/animateWidzę, że większość / wszystkie powyższe posty szukają przycisku z javascript. Działa to, o ile masz tylko jeden przycisk. Poleciłbym zdefiniowanie elementu „onclick” wewnątrz przycisku. To „kliknięcie” wywołałoby wówczas funkcję powodującą przewijanie.
Jeśli zrobisz to w ten sposób, możesz użyć więcej niż jednego przycisku, o ile przycisk wygląda mniej więcej tak:
źródło