2011-07-18 13 views
5

Właśnie napisałem to do przewijania stron, które działa dobrze i robi to, co powinien ..przewijania do góry .offset() za pomocą procentowego%

$('#nav a').click(function(){ 

var sid = $(this).attr('id'); 

$('html,body').animate({ 
scrollTop: $('#'+ sid +'-content').offset().top - 200}, 1000); 
    return false; 
}); 

..ale chcę przesunięcie być obliczona przez% a następnie px

czyli raczej następnie

top - 200 

może być

top - 30% 

wszelkie pomysły, jak to osiągnąć?

Jak zawsze, każda pomoc jest doceniana i z góry dziękuję.

szybkiej edycji:

Obecne 3 odpowiedzi (dziękuję) zdają się mnożyć za każdym razem, co nie jest to, co chcę, pragnę mieć stały odstęp 30% wysokości okna za każdym razem tak za każdym razem, gdy # id-content jest przewijane do górnych linii, mam stały umieszczony pasek boczny, który mam.

Mój obecny kod pozostawia lukę 200px, ale to powoduje problem z różnymi rozmiarami monitorów/przeglądarek, w których% to rozwiązałoby.

Odpowiedz

0

Nie wiem dokładnie, czego chcesz, 30%, ale możesz tylko pomnożyć, co chcesz, procentowo o 0,3, a następnie odjąć od góry.

Jeśli jest to górna przesunięcie się chcesz 30%:

$('html,body').animate({ 
    scrollTop: $('#'+ sid +'-content').offset().top - $('#'+ sid +'-content').offset().top * 0.3 }, 1000); 
    return false; 
}); 

oczywiście to wydaje się trochę głupio, bo to jest po prostu odpowiednikiem $('#'+ sid +'-content').offset().top * 0.7, ale można zastąpić go co chcesz.

+0

Tak, to jest najlepsze przesunięcie, jakiego potrzebuję, ponieważ moje kodowanie oznacza zwoje pozostawiając 200px luki od góry do id. Właśnie przetestowałem twój kod i robi to, co chcę, ale mnoży się za każdym razem, tj. Link 1 = 30%, link 2 = 60%, link 3 = 90% i tak dalej, chcę to tak luka od góry do id jest zawsze 30% – Dizzi

0

Spróbuj

$('#nav a').click(function(){ 

var sid = $(this).attr('id'); 
var contentTop = $('#'+ sid +'-content').offset().top; 
contentTop = parseInt(contentTop - (contentTop *0.3)); 
$('html,body').animate({ scrollTop: contentTop }, 1000); 
    return false; 
}); 
+0

To zasadniczo robi to samo, co wymowny kod, który mnoży za każdym razem (patrz komentarz powyżej). – Dizzi

+0

Może obaj wysłaliśmy odpowiedź niemal w tym samym czasie. – ShankarSangoli

+0

Tak, nie mówię, że przepisałeś jego kod tak, że robi to samo, czego nie chcę, za każdym razem mnoży :) – Dizzi

1

Można obliczyć 30% offsetu i używać:

$('#nav a').click(function(){ 

    var sid = $(this).attr('id'); 
    var offset = $('#'+ sid +'-content').offset().top; 

    $('html,body').animate({scrollTop: offset - (offset * 0.3)}, 1000); 
    return false; 
}); 

Oto example fiddle pokazując to w działaniu.

+0

Z jakiegoś powodu ta zgoda działa dla mnie. – Dizzi

+0

To nie działa, ponieważ miałem dodatkowe zamknięcie '});' z jakiegoś powodu! Naprawiłem to teraz. –

+0

To naprawiło to, ale znowu wszystkie trzy odpowiedzi wydają się mnożyć za każdym razem, po prostu chcę stałej 30% przerwy od najwyższego css equivilent: position: absolute, top: 30%; – Dizzi

5

Poniższa umieści pudełko zawsze 60% od góry:

var offset = parseInt($('#example').offset().top); 
var bheight = $(window).height(); 
var percent = 0.6; 
var hpercent = bheight * percent; 
$('html,body').animate({scrollTop: offset - hpercent}, 1000); 
0

wiem, że to wiek i OP najprawdopodobniej znalazł rozwiązanie teraz, ale tutaj jest moje proste rozwiązanie dla każdego, kto natknął się na to i tak ..

var navBarHeight = $('#navBar').height(); 
      $('html, body').animate({ 
       scrollTop: $("#scrollDestination").offset().top-navbarheight 
      }, 1000); 
+0

Witamy, i dziękuję za wniesienie wkładu. Jest to dobre rozwiązanie, ale jest praktycznie identyczne z co najmniej jedną inną odpowiedzią (i podobną do kilku innych). Gdy masz trochę więcej reputacji, możesz komentować i proponować zmiany do innych postów. –

Powiązane problemy