2010-11-15 16 views
24

jQuery ma funkcję o nazwie scrollTop, której można użyć do znalezienia liczby pikseli ukrytych nad bieżącym widokiem strony.Naprzeciwko "scrollTop" w jQuery

Nie jestem do końca pewien, dlaczego, ale nie ma funkcji scrollBottom, która zwraca liczbę pikseli poniżej bieżącego widoku strony.

Czy istnieje wtyczka jQuery, która dodaje tę funkcję? Czy też będzie wymagać skomplikowanej matematyki z wysokością okna/dokumentu i wartością scrollTop?

+6

wyszukanych matematyki? Czy nie byłoby [wysokość dokumentu] - [scrollTop] - [wysokość okna]? –

+0

@StevePaulo Prawdopodobnie nie powinieneś używać wysokości dokumentu razem z wysokością okna. To spowoduje chaos w różnych przeglądarkach. –

Odpowiedz

35

Można zrobić bardzo prosty plugin dla tego:

$.fn.scrollBottom = function() { 
    return $(document).height() - this.scrollTop() - this.height(); 
}; 

Następnie zadzwoń do dowolnego elementu, na przykład:

$(window).scrollBottom(); //how many pixels below current view 
$("#elem").scrollBottom(); //how many pixels below element 
+0

Dziwne, w moim przypadku '$ (okno) .scrollBottom();' zwraca wartość ujemną: to '-1 * $ (okno) .scrollTop();' – Abdull

+2

Znalazłem mój problem: wpadłem na ten problem: http : //stackoverflow.com/q/12103208/923560. W moim pliku HTML brakuje deklaracji typu doctype. Rozwiązaniem było dodanie '' na samej górze pliku HTML. – Abdull

0

Można spróbować scrollTo wtyczki i zrobić coś takiego:

$.scrollTo(document.height) 
0
function scrollBottom() 
{ 
    return $(window).scrollTop() + $(window).height(); 
} 

// example usage 
$('#footer').css('top', scrollBottom() - $('#footer').height()); 
0

Ponieważ domyślne zachowanie scrollTop przewija się do 0 podczas przekazywania wartości ujemnej, zrobiłem tę funkcję, która obsługuje scrollTop i symuluje "scrollDown".

Jeśli anchor_pos jest ujemna (więc powyżej mojej obecnej pozycji przewijania), I odjąć jego wartość od aktualnej pozycji przewijania (jak to ma wartość ujemną, używam znak +)

function jumpToAnchor(scrollable_div_selector, anchor_selector) 
{ 
    anchor_pos = $(anchor_selector).position().top; 

    //check if negative number 
    if (anchor_pos < 0) 
    { 
     anchor_pos = $(scrollable_div_selector).scrollTop() + anchor_pos; //anchor_pos is negative, so i'm substracting it 
    } 

    $(scrollable_div_selector).scrollTop(anchor_pos); 
} 
0

w ten sposób mam oblicza odległość od dolnej części elementu do dołu dokumentu:

$(document).height() - ($('#element').offset().top + $('#element').height()); 
1

Jeśli chcesz aby przewinąć w dół (przeciwieństwo „scrollTop”), spróbuj użyć pozycji pionowej argumentu. Tak:

$(document).ready(function(){ 
    $("button").click(function(){ 
          //position on pixeles 
     $("body").scrollTop(1300); 
    }); 
}); 

górnej części ciała, będzie: $("body").scrollTop(0);

0

spróbować tego:

return this[0].scrollHeight - this.scrollTop() - this.height();