2011-01-03 12 views
13

tengo un "ul" que contiene muchos "li" (varios cientos), el ul tiene una altura fija de aproximadamente 400px y el desbordamiento de la propiedad css: desplazamiento, cada li tiene la altura de 40px así que en cada momento dado no hay más de 10 li visibles (el resto debe ser desplazado). ¿cómo puedo cambiar la posición de desplazamiento (usando jquery) del ul a un valor específico de li?desplazamiento al elemento li - jquery

alguna idea?

+0

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

Respuesta

25

que tiene que hacer algo como esto:

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

Si quieren animar, hacer

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

Obviamente ajustar 14 para diferentes li s.

+0

nice, me ahorró mucho tiempo – TecHunter

+0

Lo hice: '$ ('# yourUL'). ScrollTop (0) .scrollTop ($ ('# yourUL li: nth-child (14)'). Position(). Top); 'de esta manera siempre conseguimos posición desde arriba. – TecHunter

+0

te puede interesar más: '$ ('# yourUL'). ScrollTop ($ ('# yourUL'). Top + $ ('# yourUL li: nth-child (14)'). Position(). Top); ' ya que no implica un salto extraño a la cima –

3

Se puede hacer así:

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

es necesario ajustar el valor de eq para li específica o incluso se puede personalizar el selector.

+0

pero isnt esta cambiando la posición de desplazamiento de todo el cuerpo? Quiero cambiar la posición de desplazamiento de la ul – Ran

+0

@Ran: debe especificar el selector adecuado en lugar de '#ulID li: eq (1)' según sus requisitos :) – Sarfraz

+0

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

2

Si alguien necesita una versión JS vainilla, lo siguiente está funcionando bien para mí, el valor de 50 es solo para mostrar todo cuando estoy cerca de la parte superior de la lista. Puedes ajustar eso.

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

yo nos acercamos usando la respuesta de @ lonesomeday, pero me encontré con que tenía para calcular la posición relativa de la específica li desde el primer li porque cambió dependiendo de la posición de desplazamiento actual de la ul que contiene.

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

¡¡¡Esto funcionó increíble !! – Abhinav

+0

te amo hombre me acabas de ahorrar horas –

Cuestiones relacionadas