Глюк при определении позиции элемента относительно родителя
Доброго времени суток!
Описание: У меня есть div с заданной высотой и он изначально скрыт(display:none). В диве стоит overflow:auto; Если содержимое дива больше, чем сам див, появляется вертикальная прокрутка. При нажатии на некоторую кнопку див показывается и в зависимости от условий должна изменятся позиция скролла. Проблема: Неверно считает позицию элемента в диве. Точнее как...считает верно, но через раз. Буквально через раз. Первый раз кликаю - правильно считает, второй раз - неправильно. Третий раз - правильно и т.д. Код: Вот участок кода который отвечает за расчёт позиции и её установку. $('.button').click(function(){ test_index = 7;//пускай для примера он будет статичный $('.hidden_div').scrollTop(parseInt($('.hidden_div .elements').eq(test_index).position().top)); }); Реальный пример: Ссылка Вопрос: Что делать? Как быть? |
Цитата:
|
ок.
пожалуйста - ссылка Жмём там где Латвия. Выбираем "Таджикистан", один из последних. Закрываем селект. Потом жмём ещё раз. И так несколько раз. Позиция будет устанавливаться правильно через раз. |
wursta,
position().top - возвращает позицию начиная с видимой части блока. scrollTop() - позиция прокрутки в блоке (расчитывается исходя из размеров всего блока, не только видимой его части). Поэтому два варианта: 1) костыль - перед тем как взять top, делаем scrollTop(0) $('.button').click(function(){ test_index = 7;//пускай для примера он будет статичный $('.hidden_div').scrollTop(0); //теперь top будет равен высоте всех элементов до него $('.hidden_div').scrollTop(parseInt($('.hidden_div .elements').eq(test_index).position().top)); }); 2) правильный - считать высоту всех элементов до необходимого $('.button').click(function(){ test_index = 7;//пускай для примера он будет статичный var el = $('.hidden_div .elements').eq(test_index); var scrollTop = el.height(); $.each(el.prevAll(), function (index, elem) { scrollTop += $(elem).height(); }); $('.hidden_div').scrollTop(scrollTop); }); |
offset
Цитата:
|
спасибо. =)
Ну если считать высоту, то да..позиция становится не нужна по сути.. |
Цитата:
|
Цитата:
|
wursta, тебе видней... :D
|
Часовой пояс GMT +3, время: 02:07. |