Eu tenho 20 itens de lista dentro de uma div que só podem mostrar 5 por vez. Qual é uma boa maneira de rolar para o item 10 e depois para o item 20? Eu sei a altura de todos os itens.
O scrollTo
plugin faz isso, mas sua fonte não é super fácil de entender sem realmente entrar nele. Não quero usar este plugin.
Vamos dizer que eu tenho uma função que leva 2 elementos $parentDiv
, $innerListItem
nem $innerListItem.offset().top
nem $innerListItem.positon().top
me dá a scrollTop correta por US $ parentDiv.
$("#container").scrollTo(target, duration, options)
. O alvo é apenas um#anchor
. Feito.Respostas:
Na
$innerListItem.position().top
verdade, é relativo ao.scrollTop()
primeiro ancestral posicionado. Portanto, a maneira de calcular o$parentDiv.scrollTop()
valor correto é começar certificando-se de que$parentDiv
está posicionado. Se ainda não tiver um explícitoposition
, useposition: relative
. Os elementos$innerListItem
e todos os seus ancestrais$parentDiv
precisam ter nenhuma posição explícita. Agora você pode rolar para o$innerListItem
com:fonte
Este é o meu próprio plugin (posicionará o elemento no topo da lista. Especialmente para
overflow-y : auto
. Pode não funcionar comoverflow-x
!):NOTA :
elem
é o seletor HTML de um elemento para o qual a página será rolada. Qualquer coisa suportado pelo jQuery, como:#myid
,div.myclass
,$(jquery object)
, [objecto dom], etc.Se você não precisar que ele seja animado, use:
Como usar:
Nota:
#innerItem
pode estar em qualquer lugar dentro#overflow_div
. Realmente não precisa ser uma criança direta.Testado no Firefox (23) e Chrome (28).
Se você quiser rolar a página inteira, verifique esta pergunta .
fonte
elem
?? você não explica nada.$(this).scrollTop($(this).scrollTop() - $(this).offset().top + $(elem, $(this)).offset().top);
- cumprimentos$(this).scrollTop() - $(this).offset().top + $(elem).offset().top - 10
.Ajustei a resposta de Glenn Moss para levar em consideração o fato de que a div de estouro pode não estar no topo da página.
Eu estava usando isso em um aplicativo do Google Maps com um modelo responsivo. Na resolução> 800px, a lista estava no lado esquerdo do mapa. Na resolução <800, a lista estava abaixo do mapa.
fonte
As respostas acima posicionarão o elemento interno na parte superior do elemento de transbordamento, mesmo que esteja dentro do elemento de transbordamento. Eu não queria isso, então o modifiquei para não alterar a posição de rolagem se o elemento estiver em exibição.
fonte
Escrevo estas 2 funções para facilitar minha vida:
E use-os:
fonte
elem.offset().top
está calculando a partir do topo da tela. Eu quero que calcular a partir do elemento pai. Como faço isso ?Depois de jogar por um longo tempo, é isso que eu criei:
e eu chamo assim
fonte