Chciałbym, aby przeglądarka przewijała stronę do danej kotwicy, używając tylko JavaScript.
I została określona name
lub id
atrybut w moim kod HTML:
<a name="anchorName">..</a>
lub
<h1 id="anchorName2">..</h1>
Chciałbym uzyskać taki sam efekt, jak przy nawigowaniu do http://server.com/path#anchorName
. Stronę należy przewinąć, aby kotwica znajdowała się w górnej części widocznej części strony.
<a href="#anchorName">link</a>
function scrollToHash(hashName) { location.hash = "#" + hashName; }
O wiele prościej:
źródło
scrollIntoViewOptions
zbehavior: "smooth"
opcją, ale obecnie jest zgodny tylko z Firefoksem.Możesz użyć jQuerys .animate () , .offset () i
scrollTop
. Lubićprzykładowy link: http://jsbin.com/unasi3/edit
Jeśli nie chcesz animować, użyj .scrollTop () jak
lub javascripts native
location.hash
jakźródło
<h1 id="anchorName">
lub<a name="anchorName">
, użyj$('#'+hash+',a[name='+hash+']')
lub lekko zoptymalizowany,$(document.getElementById(hash) || 'a[name='+hash+']')
który najpierw wyszuka element według identyfikatora i ucieka się do wyszukiwania a tylko wtedy, gdy nie zostanie znaleziony.$("#selector")
jest zoptymalizowany, ale$("#selector,a[name='selector']")
nie przejdzie takich samych optymalizacji tak szybko. Przypuszczam, że mój komentarz z 2,5 roku jest trochę dziwny. „Optymalizacja” pozwala uniknąća[name='selector']
wyszukiwania, jeśli znajdzie identyfikator, a nie optymalizuje wyszukiwanie identyfikatora.Świetne rozwiązanie jAndy, ale wydaje się, że płynne przewijanie ma problemy z działaniem w firefoxie.
Pisanie w ten sposób działa również w przeglądarce Firefox.
źródło
2018-2020 Pure js:
Istnieje bardzo wygodny sposób przewijania do elementu:
Ale o ile rozumiem, nie ma on tak dobrego wsparcia, jak poniższe opcje.
Dowiedz się więcej o metodzie.
Jeśli konieczne jest, aby element był na górze:
Przykład demonstracyjny na Codepen
Jeśli chcesz, aby element był na środku:
Przykład demonstracyjny na Codepen
Wsparcie:
Piszą, że
scroll
jest to ta sama metodascrollTo
, ale wsparcie pokazuje się lepiejscrollTo
.Więcej o metodzie
źródło
Czyste rozwiązanie javascript bez JQuery. Testowane na Chrome i Ie, nie testowane na IOS
demo: https://jsfiddle.net/jd7q25hg/12/
źródło
W 2018 roku nie potrzebujesz jQuery dla czegoś tak prostego. Wbudowana
scrollIntoView()
metoda obsługujebehavior
właściwość „ ” do płynnego przewijania dowolnego elementu na stronie. Możesz nawet zaktualizować adres URL przeglądarki za pomocą skrótu, aby uczynić go bukmacherskim.Z tego samouczka na temat przewijania zakładek HTML , oto natywny sposób automatycznego dodawania płynnego przewijania do wszystkich linków zakotwiczenia na stronie:
źródło
Płynnie przewiń do właściwej pozycji (2019)
Uzyskaj poprawną
y
współrzędną i użyjwindow.scrollTo({top: y, behavior: 'smooth'})
Z przesunięciem
scrollIntoView
jest również dobrą opcją, ale w niektórych przypadkach może nie działać idealnie. Na przykład, gdy potrzebujesz dodatkowego przesunięcia . PoscrollTo
prostu musisz dodać to przesunięcie w następujący sposób:źródło
css html { scroll-behavior: smooth; }
źródło
Rozwiązanie z CSS-Tricks nie działa już w jQuery 2.2.0. Wyrzuci błąd selektora:
Naprawiłem to, zmieniając selektor. Pełny fragment kodu jest następujący:
źródło
Większość odpowiedzi jest niepotrzebnie skomplikowana.
Jeśli chcesz tylko przejść do elementu docelowego, nie potrzebujesz JavaScript:
Jeśli chcesz animować przewijanie do celu , zapoznaj się z odpowiedzią @ Shahil.
źródło
To działa:
https://jsfiddle.net/68pnkfgd/
Po prostu dodaj klasę „przewiń” do wszystkich linków, które chcesz animować
źródło
To działający skrypt, który przewinie stronę do kotwicy. Aby skonfigurować, wystarczy podać link do kotwicy id, który odpowiada atrybutowi nazwy kotwicy, do której chcesz przewinąć.
źródło
Wiem, że to pytanie jest naprawdę stare, ale znalazłem łatwe i proste rozwiązanie jQuery w trikach css . Tego właśnie używam.
źródło
źródło
rozwiązanie vue2 ... dodaj prostą właściwość danych, aby po prostu wymusić aktualizację
źródło
najłatwiejszym sposobem, aby przeglądarka przewinęła stronę do danej kotwicy, jest wpisanie swojego style.css * {przewijanie: gładkie;}, a w nawigacji HTML użyj #NameOfTheSection
źródło