2011-01-03 16 views
13

ho un "ul" che contiene un sacco di "li" (diverse centinaia), l'ul ha un altezza fissa di circa 400px e l'overflow della proprietà css: scroll, ogni li ha l'altezza di 40px così in ogni dato momento non ci sono più di 10 li visibili (il resto deve essere fatto scorrere verso). come posso cambiare la posizione di scorrimento (usando jquery) dell'ul su un li specifico?scrolling to li element - jquery

qualche pensiero?

+0

http://stackoverflow.com/questions/1805808/jquery-scrollintoview – mplungjan

risposta

25

Hai bisogno di fare qualcosa di simile:

$('#yourUL').scrollTop($('#yourUL li:nth-child(14)').position().top); 

Se si desidera animare esso,

$('#yourUL').animate({ 
    scrollTop: $('#yourUL li:nth-child(14)').position().top 
}, 'slow'); 

Ovviamente regolare 14 per i diversi li s.

+0

nice, mi ha salvato così tanto tempo – TecHunter

+0

Ho fatto questo: '$ ('# yourUL'). ScrollTop (0) .scrollTop ($ ('# yourUL li: nth-child (14)'). Position(). Top "In questo modo otteniamo sempre la posizione dall'alto. – TecHunter

+0

ti potrebbe interessare di più: '$ ('# yourUL'). ScrollTop ($ ('# yourUL'). Top + $ ('# yourUL li: nth-child (14)'). Position(). Top) poiché non comporta un salto strano verso l'alto –

3

Si può fare in questo modo:

$('html, body').animate({ 
    scrollTop:$('#ulID li:eq(1)').offset().top 
}, 1000); 

È necessario regolare il valore per eq per specifici li o si può anche personalizzare il selettore.

+0

ma isnt questo cambiando la posizione di scorrimento di tutto il corpo? Voglio cambiare la posizione di scorrimento di ul – Ran

+0

@Ran: Devi specificare il selettore appropriato al posto di '#ulid li: eq (1)' secondo le tue esigenze :) – Sarfraz

+0

@Ran: Modifica '$ ('html, body ') 'a' $ (' # your-UL ') ' – thirtydot

2

Se qualcuno ha bisogno di una versione di JS vaniglia, il seguente sta funzionando bene per me, il valore di 50 è solo così che sto mostrando l'intero articolo quando sono vicino alla cima della lista. Puoi regolarlo.

function updateListSelection(liID) { 

    var list = document.getElementById("id Tag Of The <UL> element"), 
     targetLi = document.getElementById(liID); // id tag of the <li> element 

    list.scrollTop = (targetLi.offsetTop - 50); 
}; 
16

mi sono avvicinato con la risposta di @ lonesomeday, ma ho scoperto che avevo per calcolare la posizione relativa della specifica li dal primo li perché ha cambiato a seconda della posizione di scorrimento corrente del contenente ul.

$('#yourUL').scrollTop($('#yourUL li:nth-child(14)').position().top - $('#yourUL li:first').position().top) 
+0

Questo ha funzionato fantastico !! – Abhinav

+0

ti amo uomo. mi hai appena salvato ore –