2011-07-13 18 views
102

Edycja animacji przewijania do określonego identyfikatora podczas ładowania strony. Zrobiłem wiele badań i natknąłem się na to:Animacja przewijania do identyfikatora przy ładowaniu strony

$("html, body").animate({ scrollTop: $('#title1').height() }, 1000); 

ale to wydaje się zaczynać od identyfikatora i animować na górze strony?

HTML (który jest w połowie drogi w dół strony) jest po prostu:

<h2 id="title1">Title here</h2> 
+1

To nie jest żadna odpowiedź, ale bardzo polecam wtyczkę Ariel Flesler "scrollTo"; ma wiele funkcji do przesuwania strony i kilka rozszerzeń wtyczki dla typowych przypadków (na przykład, możesz znaleźć jego wtyczkę "LocalScroll" przydatną do przewijania do href łącza, jeśli jest na tej samej stronie). Możesz pobrać wtyczkę tutaj: http://flesler.blogspot.com/2007/10/jqueryscrollto.html – Faisal

+0

OP jest stary, ale udostępnię ten post innym osobom pochodzącym z SE. Oto artykuł, który łączy prostą funkcję rozwiązania problemu: http://smartik.ws/2015/01/super-simple-animate-scroll-to-id-using-jquery/ –

Odpowiedz

276

Jesteś tylko przewijanie wysokość swojego elementu. offset() zwraca współrzędne elementu w stosunku do dokumentu, a top param daje odległość między elementu w pikselach wzdłuż osi y:

$("html, body").animate({ scrollTop: $('#title1').offset().top }, 1000); 

Można także dodać opóźnienie do niego:

$("html, body").delay(2000).animate({scrollTop: $('#title1').offset().top }, 2000); 
+1

Co to jest automatyczne przewijanie ja idę "WOW COOL !!"? Może to prostota twojego rozwiązania. – theblang

+0

Potrzebowałem przewinąć element do widoku po wczytaniu strony, ale miałem dwie problemy: a) używając "html, body" dałem dwa callbacki (po jednym dla każdego dopasowanego elementu). b) To zależy od przeglądarki, która część ciała lub html działa. Zrobiłem więc sedno, które można zaadaptować do użycia w projekcie, aby zapewnić przewijanie do widoku w "dowolnej" przeglądarce i że otrzymasz tylko jedno wywołanie zwrotne po zakończeniu animacji. https: //gist.github.com/netsi1964/4ddffe1ae14e05220d25 – Netsi1964

+1

To nie jest prawdą. Naprawdę powinieneś wziąć pod uwagę bieżącą pozycję przewijania ciała lub elementu, którą próbujemy "przewinąć". Mając to na uwadze, dodajesz bieżącą pozycję przewijania elementu 'body' do pozycji' offset(). Top' elementu, który chcemy widzieć. Wynikową sumą jest wartość, którą chcemy przewinąć do '$ (' html, body '). animate ({scrollTop: ($ (' html, body '). scrollTop() + $ (' # title1 '). offset(). top)}, 1000); ' – magreenberg

3

Istnieje wtyczka jquery do tego. Przewija dokument do określonego elementu, dzięki czemu będzie idealnie widoczny w środku rzutni. Obsługuje także animacje, dzięki czemu efekt przewijania będzie wyglądał bardzo gładko. Sprawdź this link.

W twoim przypadku kod jest

$("#title1").animatedScroll({easing: "easeOutExpo"}); 
+0

"Obsługuje także animacje, które sprawiają, że efekt przewijania wygląda super gładko" Niestety, to nie jest prawdą. Jeśli komputer jest powolny z jakiegoś powodu, po prostu przeskakuje, nie poruszając się właściwie. – brunoais

+0

Płynne przewijanie wymaga obliczenia dużej liczby pikseli. Pewnie powolny "komputer" (więcej GPU) nie może tego zrobić, ale z powodu braku wystarczającej liczby ALU. Więc ogólnie ma rację. I naprawdę łatwe przewijanie lib. – Roland

1

spróbuj z następującym kodem. tworzyć elementy z nazwą klasy strona-przewijać i zachować nazwę id do href z odpowiednimi linkami

$('a.page-scroll').bind('click', function(event) { 
     var $anchor = $(this); 
     $('html, body').stop().animate({ 
      scrollTop: ($($anchor.attr('href')).offset().top - 50) 
     }, 1250, 'easeInOutExpo'); 
     event.preventDefault(); 
    }); 
4

Czysta javascript rozwiązanie z scrollIntoView() funkcji:

document.getElementById('title1').scrollIntoView({block: 'start', behavior: 'smooth'});
<h2 id="title1">Some title</h2>

PS: "gładki" parametr działa teraz z Chrome 61 jako julien_c wspomniano w komentarzach.

+1

Działa teraz (z Chrome 61) –

Powiązane problemy