Tengo 20 elementos de lista dentro de un div que solo pueden mostrar 5 a la vez. ¿Cuál es una buena manera de desplazarse al elemento n. ° 10 y luego al elemento n. ° 20? Sé la altura de todos los artículos.
El scrollTo
complemento hace esto, pero su fuente no es muy fácil de entender sin realmente entrar en él. No quiero usar este complemento.
Digamos que tengo una función que toma 2 elementos $parentDiv
, $innerListItem
ni $innerListItem.offset().top
tampoco $innerListItem.positon().top
me da la correcta para scrollTop $ parentDiv.
$("#container").scrollTo(target, duration, options)
. El objetivo es solo un#anchor
. Hecho.Respuestas:
El
$innerListItem.position().top
es realmente relativo al.scrollTop()
de su primer antepasado posicionado. Entonces, la forma de calcular el$parentDiv.scrollTop()
valor correcto es comenzar asegurándose de que$parentDiv
esté posicionado. Si aún no tiene un explícitoposition
, useposition: relative
. Los elementos$innerListItem
y todos sus antepasados hasta no$parentDiv
necesitan tener una posición explícita. Ahora puede desplazarse hasta$innerListItem
con:fuente
Este es mi propio complemento (colocará el elemento en la parte superior de la lista. Especialmente para
overflow-y : auto
. ¡Puede que no funcioneoverflow-x
!):NOTA :
elem
es el selector HTML de un elemento al que se desplazará la página. Cualquier cosa apoyado por jQuery, como:#myid
,div.myclass
,$(jquery object)
, [objeto DOM], etc.Si no necesita que esté animado, use:
Cómo utilizar:
Nota:
#innerItem
puede estar en cualquier lugar dentro#overflow_div
. Realmente no tiene que ser un niño directo.Probado en Firefox (23) y Chrome (28).
Si desea desplazarse por toda la página, marque esta pregunta .
fuente
elem
?? No lo explicas en absoluto.$(this).scrollTop($(this).scrollTop() - $(this).offset().top + $(elem, $(this)).offset().top);
- saludos$(this).scrollTop() - $(this).offset().top + $(elem).offset().top - 10
.He ajustado la respuesta de Glenn Moss para tener en cuenta el hecho de que el desbordamiento div podría no estar en la parte superior de la página.
Estaba usando esto en una aplicación de Google Maps con una plantilla receptiva. En resolución> 800 px, la lista estaba en el lado izquierdo del mapa. En la resolución <800, la lista estaba debajo del mapa.
fuente
Las respuestas anteriores posicionarán el elemento interno en la parte superior del elemento de desbordamiento, incluso si está a la vista dentro del elemento de desbordamiento. No quería eso, así que lo modifiqué para no cambiar la posición de desplazamiento si el elemento está a la vista.
fuente
Escribo estas 2 funciones para hacerme la vida más fácil:
Y úsalos:
fuente
elem.offset().top
está calculando desde la parte superior de la pantalla. Quiero que calcule a partir del elemento padre. Cómo puedo hacer eso ?Después de jugar con él durante mucho tiempo, esto es lo que se me ocurrió:
y lo llamo así
fuente