2009-06-12 10 views
5

Ho un div con altezza definita e overflow:scroll;. Il suo contenuto è troppo lungo per cui appaiono le barre di scorrimento.jQuery: come determinare se un div è scorretto verso il basso

Ora per la parte di ichy. Alcuni dei suoi HTML interni appaiono stranamente tutto il tempo (per essere precisi, il piè di pagina di una tabella generato dal plugin tableFilter). Mi piacerebbe far scomparire questo piè di pagina quando non è necessario (in realtà appare fuori dal bordo contenente <div>). Ho deciso di farlo sparire ma impostando il suo z-index su -1000. Ma voglio farlo apparire quando il <div> contenente è completamente scrollato verso il basso.

Come posso sapere che l'utente ha eseguito lo scorrimento verso il basso?


Utilizzando l'aiuto di risposte qui di seguito, ho usato l'attributo scrollTop ma la differenza tra scrollTop e innerHeight è la dimensione della barra di scorrimento più alcuni delta non identificato. Una barra di scorrimento è alta 16 pixel nella maggior parte dei browser in Windows, ma ottengo una differenza di 17 in Firefox e qualcosa come 20 in IE, dove i bordi dei miei contenuti <div> sembrano essere ingranditi.

Un modo (in realtà due modi ...) per calcolare la dimensione della barra di scorrimento è stato dato there.

risposta

11

È necessario confrontare l'altezza div con la posizione scrollTop e l'altezza dell'elemento.

$(div).scroll(function(){ 
    if(isScrollBottom()){ 
    //scroll is at the bottom 
    //do something... 
    } 
}); 

function isScrollBottom() { 
    var elementHeight = $(element).height(); 
    var scrollPosition = $(div).height() + $(div).scrollTop(); 
    return (elementHeight == scrollPosition); 
} 
+0

Sto ottenendo una differenza di 17 pixel tra elementHeight e scrollPosition quando scorrono completamente verso il basso. Pensi che sia l'altezza della barra di scorrimento + alcuni bordi? – glmxndr

+0

C'è una barra di scorrimento orizzontale? Sembra l'altezza della barra di scorrimento. –

+0

Sì, sembra essere l'altezza della barra di scorrimento. Pubblicherò un'altra domanda per sapere come ottenere questa altezza della barra di scorrimento su qualsiasi browser. – glmxndr

1

No jQuery necessario per ottenere queste informazioni:

element.scrollTop; 

In un evento di scorrimento del DIV, utilizzare queste informazioni per controllare contro l'altezza dell'elemento, se corrisponde (o è vicino alla corrispondenza) fare tutto quello che vuoi.

+0

In realtà non è l'altezza dell'elemento ma la differenza tra l'altezza interna e l'altezza del contenitore. Non è ? – glmxndr

+0

Sto dicendo la stessa cosa di Shaun. Ma invece di cercare == farei qualcosa di sciatto come 'elementHeight <= scrollPosition + 20' per tenere conto della barra di scorrimento orizzontale.Se riscontri successo con la tua altra domanda (trovando la dimensione della barra di scorrimento) la utilizzerai al posto della mia 20 sciatta. –

3

È possibile sapere se il div viene fatta scorrere verso il basso semplicemente facendo questo:

if (div.scrollTop + div.clientHeight == div.scrollHeight){ 
//... 
} 

Funziona su Firefox, Chrome e IE8

0
function elementInViewport(el) { 
    var listcontent= $(".listContainer")[0].getBoundingClientRect(); 
    var rect = $(el)[0].getBoundingClientRect(); 
    return [(rect.top >= 0 && rect.left >= 0 && rect.bottom <= listcontent.bottom), (rect.bottom - listcontent.bottom)] 
} 
0

Hai solo bisogno di utilizzare lo scrollHeight proprietà del div anziché dell'altezza. L'isScrollBottom function() che Shaun Humphries scritto in precedenza può essere messo in questo modo

function isScrollBottom() { 
var totalHeight = $("divSelector")[0].scrollHeight; 
var scrollPosition = $("divSelector").height() + $("divSelector").scrollTop(); 
return (totalHeight == scrollPosition); 
} 
-1

credo, semplicemente

$(this).scrollTop()

farebbe il trucco.

+0

Ok, posso sapere perché un voto negativo? –

0

Questo non è limitato a div:

toallyScrolled = element.scrollHeight - element.scrollTop === element.clientHeight; 

da MDN Element.scrollHeight. C'è anche una bella demo su quella pagina.

Problemi correlati