Przewijanie do elementu w JavaScript

JavaScript: przewijanie do elementu, opcje scrollIntoView na żywo | We.Inc

Przetestuj każdą opcję scrollIntoView w działającym polu, napraw nagłówki ukryte pod przyklejonym headerem za pomocą scroll-margin-top i skopiuj kod płynnego przewijania w JavaScript i czystym CSS.

Przewijanie do elementu w JavaScript

Wywołaj element.scrollIntoView({ behavior: 'smooth', block: 'start' }), aby pokazać element w widoku. block decyduje, gdzie element znajdzie się w pionie: start, center, end lub nearest. Jeśli przyklejony header zasłania cel, nadaj celowi w CSS scroll-margin-top równe wysokości headera, zamiast wyliczać przesunięcia w JavaScript.

Opcje scrollIntoView

Są trzy sposoby przeniesienia strony do elementu: scrollIntoView na elemencie, scrollTo z pozycją w pikselach i zwykły link do id. Plac zabaw pokazuje, co robi każda wartość block i jak scroll-margin-top chroni nagłówek przed przyklejonym paskiem, a przykłady obejmują kod potrzebny do menu, błędów formularzy i list w stylu czatu.

Najczęściej zadawane pytania

Jak przewinąć do elementu z offsetem dla stałego headera?

Dodaj do celu scroll-margin-top, na przykład h2 { scroll-margin-top: 80px }. Specyfikacja CSS scroll snap wymaga, by przeglądarki uwzględniały ten margines dla scrollIntoView i linków do #id, nawet gdy przyciąganie nie jest używane.

Jak sprawić, by przewijanie było płynne?

Przekaż behavior: 'smooth' do scrollIntoView lub scrollTo albo ustaw scroll-behavior: smooth na elemencie html, aby animowało się każde przewijanie z kodu i każdy link wewnątrz strony. scroll-behavior nie wpływa na przewijanie wykonywane przez użytkownika kółkiem lub dotykiem.

Czym różni się scrollIntoView od scrollTo?

scrollIntoView działa na elemencie i sam wylicza pozycję. window.scrollTo({ top, behavior }) przenosi do dokładnej pozycji w pikselach, a scrollBy przesuwa o względną wartość. Używaj scrollTo, gdy masz już liczbę, na przykład przy powrocie do zapisanej pozycji.

Jak przewinąć na górę strony?

window.scrollTo({ top: 0, behavior: 'smooth' }). Dla przewijalnego panelu wywołaj tę samą metodę na elemencie panelu zamiast na window.

Dlaczego scrollIntoView nic nie robi?

Częste przyczyny to wywołanie przed powstaniem elementu (uruchom je po renderze, na przykład w efekcie React), element z display: none albo opcja nearest dla elementu, który jest już w pełni widoczny.

Wybór wartości block

Bez JavaScript

Kod przewijania do elementu

Płynne przewinięcie do sekcji

Wyszukuje element po id i przenosi jego górną krawędź na górę widoku.

Offset przyklejonego headera w CSS

Jedna reguła naprawia nachodzenie przy przewijaniu z kodu i przy linkach kończących się na #id. Media query pomija animację dla osób, które wolą ograniczony ruch.

Pokaż pierwsze niepoprawne pole

center trzyma pole i jego etykietę na środku ekranu, a focus przenosi tam też użytkowników klawiatury.

Przewijanie tylko wewnątrz panelu

Używa pozycji elementu wewnątrz panelu, więc strona wokół się nie przesuwa.

React: przewijanie do ref

Ref wskazuje węzeł DOM dopiero po renderze, więc wywołanie odbywa się w handlerze kliknięcia lub w efekcie.

Plac zabaw scrollIntoView

To pole ma własny przyklejony pasek. Wybierz wiersz i opcje, a potem przewiń. Pole stosuje te same obliczenia wyrównania przez scrollTo, więc reszta strony stoi w miejscu.

Wiersz docelowy: {n}

scroll-margin-top: {n}px

Przewiń

Wróć na górę pola

Przyklejony pasek, wysokość 40px

Wiersz {n}

Pole demo z przewijaniem

Kod na Twoją stronę

Zacznij za darmo · Bez karty kredytowej

Powiązane: Poradniki

Produkt

Dla kogo

Funkcje

Zasoby

Firma

Mapa strony