2010-12-30 25 views
30

Więc to jest bieżący kod mamjQuery scrollTop, przewijanie do div z identyfikatorem?

$(document).ready(function() { 
    $('.abouta').click(function(){ 
     $('html, body').animate({scrollTop:308}, 'slow'); 
     return false; 
    }); 
    $('.portfolioa').click(function(){ 
     $('html, body').animate({scrollTop:708}, 'slow'); 
     return false; 
    }); 
    $('.contacta').click(function(){ 
     $('html, body').animate({scrollTop:1108}, 'slow'); 
     return false; 
    }); 
}); 

Po kliknięciu linku np "abouta" przewija do określonej sekcji strony. Wolę zrobić scrollTo, a następnie id elementu div, więc nie będę musiał zmieniać pozycji scrollTo, jeśli zmienię dopełnienie itd. Czy jest jakiś sposób? Dzięki

Odpowiedz

95

zamiast

$('html, body').animate({scrollTop:xxx}, 'slow'); 

użytku

$('html, body').animate({scrollTop:$('#div_id').position().top}, 'slow'); 

to zwróci absolutną górną pozycję cokolwiek elementem wybrania jako #div_id

+1

działa idealnie, okrzyki: D – Jake

+3

Jestem zaskoczony nikt nie skomentował na tak długo - pytanie w takim stanie, naprawdę prosi o '.offset()' zamiast '.position()' jako rozwiązanie, prawda? Element docelowy może znajdować się w dowolnym miejscu na stronie, a '.position()' [zwraca najwyższe przesunięcie względem jego kontenera] (http://api.jquery.com/position/). Zatem powyższy kod przeniesie Cię na początek dokumentu, jeśli element docelowy jest pierwszym dzieckiem jego rodzica. Czy może czegoś brakuje? – sameers

+0

Dziękuję Sameers, to dokładnie kwestia, którą miałem. .offset() działa przysmak. – Dan382

-2

jeśli chcesz przewinąć zaś tylko niektóre div może używać identyfikatora div zamiast "html, body"

$('html, body').animate(... 

użycie

$('#mydivid').animate(... 
+3

Nie, '$ ('# div'). Animate ({scrollTop: $ ('# div'). Position(). Top}, 'slow');' nie działa. (Chrome 23). Lepiej użyj '$ ('html, body'). Animate ({scrollTop: $ ('# div_id'). Position(). Top}, 'slow');' – bicycle

0

spróbuj tego:

$('html, body').animate({scrollTop:$('#xxx').position().top}, 'slow'); 
$('#xxx').focus(); 
-2

spróbować to

$('#div_id').animate({scrollTop:0}, '500', 'swing'); 
Powiązane problemy