Mam ten input
element:
<input type="text" class="textfield" value="" id="subject" name="subject">
Następnie mam kilka innych elementów, takich jak inne wprowadzanie tekstu, obszary tekstowe itp.
Gdy użytkownik kliknie że input
z#subject
, strona powinna przejść do ostatniego elementu strony z miłą animacji. Powinno to być przewijanie w dół, a nie w górę.
Ostatnim elementem strony jest submit
przycisk z #submit
:
<input type="submit" class="submit" id="submit" name="submit" value="Ok, Done.">
Animacja nie powinna być zbyt szybka i powinna być płynna.
Korzystam z najnowszej wersji jQuery. Wolę nie instalować żadnych wtyczek, ale użyć domyślnych funkcji jQuery, aby to osiągnąć.
javascript
jquery
scroll
DiegoP.
źródło
źródło
scrollTo
został dla mnie wyłączony z powodu wtyczki chrome, nie jestem pewien który.Odpowiedzi:
Zakładając, że masz przycisk z identyfikatorem
button
, spróbuj tego przykładu:Mam kod z artykułu Płynnie przewijaj do elementu bez wtyczki jQuery . Przetestowałem to na poniższym przykładzie.
źródło
.scrollTop(…)
zamiast.animate({scrollTop: …}, …)
.jQuery .scrollTo (): View - Demo, API, Source
Napisałem tę lekką wtyczkę, aby ułatwić przewijanie strony / elementu. Jest elastyczny, gdzie można przekazać element docelowy lub określoną wartość. Być może może to być część kolejnego oficjalnego wydania jQuery, co sądzisz?
Przykłady użycia:
Opcje:
scrollTarget : Element, ciąg lub liczba wskazująca pożądaną pozycję przewijania.
offsetTop : liczba określająca dodatkowe odstępy nad celem przewijania.
czas trwania : ciąg lub liczba określająca czas trwania animacji.
easing : Ciąg wskazujący, której funkcji łagodzenia należy użyć do przejścia.
complete : funkcja do wywołania po zakończeniu animacji.
źródło
Jeśli nie interesuje Cię efekt płynnego przewijania i po prostu chcesz przewinąć do określonego elementu, nie potrzebujesz do tego żadnej funkcji jQuery. JavaScript obejmuje twoją sprawę:
https://developer.mozilla.org/en-US/docs/Web/API/element.scrollIntoView
Wszystko, co musisz zrobić, to:
$("selector").get(0).scrollIntoView();
.get(0)
jest używany, ponieważ chcemy pobrać element DOM JavaScript, a nie element DOM JQuery.źródło
$(selector)[0]
?document.getElementById('#elementID').scrollIntoView()
. Nie trzeba ładować biblioteki ~ 100k tylko po to, aby wybrać element, a następnie przekonwertować go na zwykły JavaScript.document.getElementById('elementID').scrollIntoView()
Za pomocą tego prostego skryptu
Sprawiłoby, że jeśli znacznik skrótu zostanie znaleziony w adresie URL, scrollTo animuje do identyfikatora. Jeśli nie znaleziono znacznika skrótu, zignoruj skrypt.
źródło
$(window.location.hash)
nie będzie działać dla skrótów, które nie spełniają wykrycia wyrażenia regularnego jQuery. Na przykład skróty zawierające liczby. Jest to również trochę niebezpieczne; format wejściowy powinien zostać sprawdzony, abyś nie wybrał innego elementu.źródło
jQuery(document).ready(function($) { $(document).on( "click", 'a[href^="#"]', function( e ) { e.preventDefault(); var target = this.hash, $target = $(target); $('html, body').stop().animate({ scrollTop: $target.offset().top - 100}, 1000); }); });
Rozwiązanie Steve'a i Petera działa bardzo dobrze.
Ale w niektórych przypadkach może być konieczne przekonwertowanie wartości na liczbę całkowitą. O dziwo,
$("...").offset().top
czasami zwracana jest wartość zfloat
.Posługiwać się:
parseInt($("....").offset().top)
Na przykład:
źródło
Kompaktowa wersja rozwiązania „animowanego”.
Podstawowe użycie:
$('#your_element').scrollTo();
źródło
Tak to robię.
Działa w dowolnej przeglądarce.
Można go łatwo zawinąć w funkcję
Oto działający przykład
Dokumenty
źródło
Znam sposób bez jQuery:
Edycja: Minęły dwa lata i wciąż losowo uzyskuję reputację z tego postu lmao
źródło
Jeśli używasz tylko przewijania do elementu wejściowego, możesz użyć
focus()
. Na przykład, jeśli chcesz przewinąć do pierwszego widocznego wejścia:Lub pierwsze widoczne wejście w kontenerze z klasą
.error
:Dzięki Tricia Ball za zwrócenie na to uwagi!
źródło
Dzięki temu rozwiązaniu nie potrzebujesz żadnej wtyczki i nie musisz konfigurować oprócz umieszczenia skryptu przed
</body>
tagiem zamykającym .Po załadowaniu, jeśli w adresie znajduje się skrót, przewijamy go.
I - za każdym razem, gdy klikniesz
a
link zhref
hashem, np.#top
Przewijamy go.źródło
> 1
zamiast0
, tylko dlatego, że/#
powoduje zerwanie tego skryptureturn false;
na końcu zdarzenia „kliknięcie”, aby zapobiec domyślnemu działaniu - natychmiastowemu przewinięciu do zakotwiczenia -.e.preventDefault();
e.preventDefault()
jednak nie aktualizuje skrótu wW większości przypadków najlepiej byłoby użyć wtyczki. Poważnie. Zamierzam tu promować moje . Oczywiście są też inne. Ale sprawdź, czy naprawdę unikają pułapek, dla których chcesz wtyczki - nie wszystkie.
Napisałem o powodach używania wtyczki w innym miejscu . W skrócie, jedna linijka stanowiąca podstawę większości odpowiedzi tutaj
jest zły UX.
Animacja nie reaguje na działania użytkownika. Kontynuuje się, nawet jeśli użytkownik kliknie, stuknie lub spróbuje przewinąć.
Jeśli punkt początkowy animacji znajduje się blisko elementu docelowego, animacja jest boleśnie powolna.
Jeśli element docelowy znajduje się w dolnej części strony, nie można go przewinąć na górę okna. Animacja przewijania zatrzymuje się nagle, w ruchu.
Aby poradzić sobie z tymi problemami (i kilkoma innymi ), możesz użyć mojej wtyczki, jQuery.scrollable . Połączenie staje się wtedy
i to wszystko. Oczywiście jest więcej opcji .
W odniesieniu do pozycji docelowej
$target.offset().top
wykonuje pracę w większości przypadków. Należy jednak pamiętać, że zwrócona wartość nie uwzględnia obramowaniahtml
elementu ( zobacz to demo ). Jeśli potrzebujesz, aby pozycja docelowa była dokładna w jakichkolwiek okolicznościach, lepiej jest użyćDziała to nawet po ustawieniu granicy
html
elementu.źródło
Animacje:
źródło
Jeśli chcesz przewijać w kontenerze przelewu (zamiast
$('html, body')
odpowiedzi powyżej), działając również z pozycjonowaniem bezwzględnym, możesz to zrobić w następujący sposób:źródło
Łatwy sposób na uzyskanie przewijania strony do id div
źródło
Takie jest moje podejście do wyodrębniania identyfikatorów i hrefów przy użyciu ogólnego selektora klas
źródło
Bardzo prosta i łatwa w użyciu niestandardowa wtyczka jQuery. Po prostu dodaj atrybut
scroll=
do klikalnego elementu i ustawić jego wartość na selektorze, do którego chcesz przewinąć.Tak:
<a scroll="#product">Click me</a>
. Może być stosowany na dowolnym elemencie.źródło
źródło
$('html, body').animate(...)
nie dotyczy mnie na iPhonie, przeglądarce Chrome Chrome Safari.Musiałem celować w główny element treści strony.
Oto, z czym skończyłem
Wszystkie treści są połączone za pomocą div #content
źródło
Oto odpowiedź Atharvy na: https://developer.mozilla.org/en-US/docs/Web/API/element.scrollIntoView . Chciałem tylko dodać, jeśli dokument znajduje się w ramce iframe, możesz wybrać element w ramce nadrzędnej, aby przewinąć do widoku:
źródło
źródło
To najpierw przewinie w dół do
#submit
a następnie przywróci kursor z powrotem do klikniętego wejścia, które naśladuje przewijanie w dół i działa w większości przeglądarek. Nie wymaga również jQuery, ponieważ można go napisać w czystym JavaScript.Czy ten sposób używania
focus
funkcji lepiej naśladuje animację, poprzezfocus
połączenia łańcuchowe . Nie przetestowałem tej teorii, ale wyglądałoby to tak:źródło
Ustawiłem moduł przewijania modułu
npm install scroll-element
. Działa to tak:Napisane z pomocą następujących postów SO:
offset-top-of-an-element-without-jquery
scrolltop-animacja-bez jquery
Oto kod:
źródło
Aby wyświetlić pełny element (jeśli jest to możliwe przy bieżącym rozmiarze okna):
źródło
Napisałem funkcję ogólnego przeznaczenia, która przewija do obiektu jQuery, selektora CSS lub wartości liczbowej.
Przykładowe użycie:
Kod funkcji:
źródło
O ile warto, w ten sposób udało mi się osiągnąć takie zachowanie dla ogólnego elementu, który może znajdować się wewnątrz DIV z przewijaniem. W naszym przypadku nie przewijamy całego ciała, a tylko poszczególne elementy z przepełnieniem: auto; w większym układzie.
Tworzy fałszywe dane wejściowe wysokości elementu docelowego, a następnie koncentruje się na nim, a przeglądarka zajmie się resztą bez względu na to, jak głęboko znajdujesz się w przewijanej hierarchii. Działa jak marzenie.
źródło
To działało dla mnie:
źródło
źródło
ONELINER
Pokaż fragment kodu
źródło
Zaktualizowana odpowiedź od 2019 r .:
źródło