Mam 20 elementów listy wewnątrz elementu div, które mogą wyświetlać tylko 5 na raz. Jaki jest dobry sposób na przewinięcie do punktu nr 10, a następnie punktu nr 20? Znam wysokość wszystkich przedmiotów.
scrollTo
Plugin to robi, ale jego źródłem nie jest super łatwy do zrozumienia bez naprawdę się do niego. Nie chcę używać tej wtyczki.
Powiedzmy, że mam funkcję, która trwa od 2 elementów $parentDiv
, $innerListItem
ani $innerListItem.offset().top
też nie $innerListItem.positon().top
daje mi poprawną scrollTop dla $ parentDiv.
$("#container").scrollTo(target, duration, options)
. Cel to po prostu#anchor
. Gotowe.Odpowiedzi:
W
$innerListItem.position().top
rzeczywistości jest względny w stosunku do.scrollTop()
swojego pierwszego przodka. Tak więc sposobem obliczenia prawidłowej$parentDiv.scrollTop()
wartości jest rozpoczęcie od upewnienia się, że$parentDiv
jest ustawiona. Jeśli nie ma jeszcze wyraźnegoposition
, użyjposition: relative
. Elementy$innerListItem
i wszyscy jego przodkowie nie$parentDiv
muszą mieć wyraźnej pozycji. Teraz możesz przewinąć do za$innerListItem
pomocą:źródło
To jest moja własna wtyczka (umieści element na górze listy. Specjalnie dla
overflow-y : auto
. Może nie działaćoverflow-x
!):UWAGA :
elem
to selektor HTML elementu, do którego będzie przewijana strona. Wszystko poparte jQuery, takich jak:#myid
,div.myclass
,$(jquery object)
, [dom przedmiot], etc.Jeśli nie potrzebujesz animacji, użyj:
Jak używać:
Uwaga:
#innerItem
może znajdować się w dowolnym miejscu w środku#overflow_div
. Tak naprawdę nie musi to być bezpośrednie dziecko.Przetestowano w przeglądarkach Firefox (23) i Chrome (28).
Jeśli chcesz przewinąć całą stronę, sprawdź to pytanie .
źródło
elem
?? w ogóle tego nie wyjaśniasz.$(this).scrollTop($(this).scrollTop() - $(this).offset().top + $(elem, $(this)).offset().top);
- pozdrawiam$(this).scrollTop() - $(this).offset().top + $(elem).offset().top - 10
.Dostosowałem odpowiedź Glenna Mossa, aby uwzględnić fakt, że element div przepełnienia może nie znajdować się na górze strony.
Używałem tego w aplikacji Google Maps z responsywnym szablonem. Przy rozdzielczości> 800 pikseli lista znajdowała się po lewej stronie mapy. Przy rozdzielczości <800 lista znajdowała się poniżej mapy.
źródło
Powyższe odpowiedzi spowodują umieszczenie elementu wewnętrznego na górze elementu przepełnienia, nawet jeśli jest on widoczny wewnątrz elementu przepełnienia. Nie chciałem tego, więc zmodyfikowałem go, aby nie zmieniać pozycji przewijania, jeśli element jest widoczny.
źródło
Piszę te 2 funkcje, aby ułatwić sobie życie:
I użyj ich:
źródło
elem.offset().top
oblicza od góry ekranu. Chcę, aby obliczyć z elementu nadrzędnego. W jaki sposób mogę to zrobić ?Po zabawie przez bardzo długi czas wymyśliłem to:
i tak to nazywam
źródło