Chcę animować przewijanie do określonego identyfikatora podczas wczytywania strony. Zrobiłem wiele badań i znalazłem to:
$("html, body").animate({ scrollTop: $('#title1').height() }, 1000);
ale wydaje się, że zaczyna się od identyfikatora i animuje do góry strony?
Kod HTML (znajdujący się w połowie strony) to po prostu:
<h2 id="title1">Title here</h2>
Odpowiedzi:
Przewijasz tylko wysokość swojego elementu. offset () zwraca współrzędne elementu względem dokumentu, a
top
parametr param poda odległość elementu w pikselach wzdłuż osi y:Możesz także dodać do niego opóźnienie:
źródło
scroll
. Mając to na uwadze, należy dodać bieżącą pozycję przewijaniabody
dooffset().top
pozycji elementu, który chcemy wyświetlić. Wynikowa suma to wartość, do której chcemy przewinąć.$('html, body').animate({ scrollTop: ($('html, body').scrollTop() + $('#title1').offset().top) }, 1000);
.offset().top
dałoby w tym przypadku liczbę ujemną. I to naprawdę działa tylko dlabody
ihtml
ponieważoffset().top
da ci górne przesunięcie dokumentu, a nie zamierzony przewijany rodzic.Czyste rozwiązanie javascript z funkcją scrollIntoView () :
Parametr PS „smooth” działa teraz w Chrome 61, jak wspomniano w komentarzach julien_c .
źródło
jquery-animate-body-for-all-browserers .
źródło
Jest do tego wtyczka jquery. Przewija dokument do określonego elementu, aby był idealnie na środku widoku. Obsługuje również wygładzanie animacji, dzięki czemu efekt przewijania będzie wyglądał super gładko. Sprawdź ten link .
W twoim przypadku kod to
źródło
spróbuj z następującym kodem. stwórz elementy z nazwą klasy przewijaj stronę i zachowaj id nazwy do
href
odpowiednich linkówźródło
dla prostego przewijania użyj następującego stylu
wysokość: 200px; przepełnienie: przewijanie;
i użyj tej klasy stylu, który div lub sekcję chcesz wyświetlić
źródło