У меня есть 20 элементов списка внутри div, которые могут показывать только 5 одновременно. Каков хороший способ прокрутки до пункта № 10, а затем до пункта № 20? Я знаю высоту всех предметов.
scrollTo
Плагин делает это, но его источник не очень легко понять , на самом деле не попасть в него. Я не хочу использовать этот плагин.
Скажем , у меня есть функция , которая принимает 2 элемента $parentDiv
, $innerListItem
ни $innerListItem.offset().top
ни $innerListItem.positon().top
дает мне правильный scrollTop за $ parentDiv.
$("#container").scrollTo(target, duration, options)
, Цель просто#anchor
. Готово.Ответы:
$innerListItem.position().top
На самом деле по отношению к.scrollTop()
его первому позиционированному предку. Таким образом, способ рассчитать правильное$parentDiv.scrollTop()
значение состоит в том, чтобы убедиться, что$parentDiv
он расположен. Если у него еще нет явногоposition
, используйтеposition: relative
. Элементы$innerListItem
и все их предки до$parentDiv
необходимости не должны иметь явного положения. Теперь вы можете перейти к$innerListItem
:источник
Это мой собственный плагин (поместит элемент в начало списка. Специально для
overflow-y : auto
. Может не работать сoverflow-x
!):ПРИМЕЧАНИЕ :
elem
это HTML-селектор элемента, к которому будет прокручиваться страница. Все , что поддерживается JQuery, как:#myid
,div.myclass
,$(jquery object)
, [дом объект], и т.д.Если вам не нужна анимация, используйте:
Как пользоваться:
Примечание:
#innerItem
может быть где угодно внутри#overflow_div
. Это не должно быть прямым ребенком.Протестировано в Firefox (23) и Chrome (28).
Если вы хотите прокрутить всю страницу, проверьте этот вопрос .
источник
elem
?? Вы не объясняете это вообще.$(this).scrollTop($(this).scrollTop() - $(this).offset().top + $(elem, $(this)).offset().top);
- С уважением$(this).scrollTop() - $(this).offset().top + $(elem).offset().top - 10
.Я изменил ответ Гленна Мосса, чтобы учесть тот факт, что переполнение div не может быть в верхней части страницы.
Я использовал это в приложении Google Maps с адаптивным шаблоном. При разрешении> 800 пикселей список был на левой стороне карты. При разрешении <800 список был ниже карты.
источник
Приведенные выше ответы разместят внутренний элемент в верхней части элемента переполнения, даже если он находится внутри элемента переполнения. Я не хотел этого, поэтому я изменил его, чтобы не изменять позицию прокрутки, если элемент находится в поле зрения.
источник
Я пишу эти две функции, чтобы сделать мою жизнь проще:
И использовать их:
источник
elem.offset().top
рассчитывается с верхней части экрана. Я хочу, чтобы рассчитать из родительского элемента. Как я могу это сделать ?После долгой игры с этим я придумал:
и я называю это так
источник