Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.01.2013, 16:47
Новичок на форуме
Отправить личное сообщение для wursta Посмотреть профиль Найти все сообщения от wursta
 
Регистрация: 25.01.2013
Сообщений: 4

Глюк при определении позиции элемента относительно родителя
Доброго времени суток!

Описание: У меня есть div с заданной высотой и он изначально скрыт(display:none). В диве стоит overflow:auto; Если содержимое дива больше, чем сам див, появляется вертикальная прокрутка. При нажатии на некоторую кнопку див показывается и в зависимости от условий должна изменятся позиция скролла.

Проблема:
Неверно считает позицию элемента в диве. Точнее как...считает верно, но через раз. Буквально через раз. Первый раз кликаю - правильно считает, второй раз - неправильно. Третий раз - правильно и т.д.

Код:
Вот участок кода который отвечает за расчёт позиции и её установку.
$('.button').click(function(){
  test_index = 7;//пускай для примера он будет статичный
  $('.hidden_div').scrollTop(parseInt($('.hidden_div .elements').eq(test_index).position().top));
	});


Реальный пример:
Ссылка

Вопрос:
Что делать? Как быть?

Последний раз редактировалось wursta, 25.01.2013 в 16:57. Причина: добавление ссылки
Ответить с цитированием
  #2 (permalink)  
Старый 25.01.2013, 16:53
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,202

Сообщение от wursta
Что делать?
Для начала нормальный тестовый пример...
Ответить с цитированием
  #3 (permalink)  
Старый 25.01.2013, 16:55
Новичок на форуме
Отправить личное сообщение для wursta Посмотреть профиль Найти все сообщения от wursta
 
Регистрация: 25.01.2013
Сообщений: 4

ок.
пожалуйста - ссылка

Жмём там где Латвия.
Выбираем "Таджикистан", один из последних. Закрываем селект. Потом жмём ещё раз. И так несколько раз. Позиция будет устанавливаться правильно через раз.
Ответить с цитированием
  #4 (permalink)  
Старый 26.01.2013, 00:50
Профессор
Отправить личное сообщение для Hoshinokoe Посмотреть профиль Найти все сообщения от Hoshinokoe
 
Регистрация: 08.01.2012
Сообщений: 253

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);
});

Последний раз редактировалось Hoshinokoe, 26.01.2013 в 00:57.
Ответить с цитированием
  #5 (permalink)  
Старый 26.01.2013, 06:14
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

offset
Сообщение от wursta
Если содержимое дива больше, чем сам див,
А нужна ли позиция? Достаточно отношения высот http://jquery-docs.ru/CSS/height/
Ответить с цитированием
  #6 (permalink)  
Старый 27.01.2013, 16:42
Новичок на форуме
Отправить личное сообщение для wursta Посмотреть профиль Найти все сообщения от wursta
 
Регистрация: 25.01.2013
Сообщений: 4

спасибо. =)
Ну если считать высоту, то да..позиция становится не нужна по сути..
Ответить с цитированием
  #7 (permalink)  
Старый 28.01.2013, 09:00
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,202

Сообщение от wursta
пожалуйста - ссылка

Жмём там где Латвия.
Выбираем "Таджикистан", один из последних. Закрываем селект. Потом жмём ещё раз. И так несколько раз.
Это не тестовый пример...
Ответить с цитированием
  #8 (permalink)  
Старый 28.01.2013, 10:01
Новичок на форуме
Отправить личное сообщение для wursta Посмотреть профиль Найти все сообщения от wursta
 
Регистрация: 25.01.2013
Сообщений: 4

Сообщение от ksa Посмотреть сообщение
Это не тестовый пример...
Вы пытаетесь увеличить количество сообщений оставленных на форуме или помочь в решении проблемы?
Ответить с цитированием
  #9 (permalink)  
Старый 28.01.2013, 13:39
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,202

wursta, тебе видней...
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение стиля родительского элемента при :hover дочернего lanzs Элементы интерфейса 2 16.10.2010 13:28
Как запустить функцию при отображении элемента в окне браузера? Kostushko Events/DOM/Window 6 27.09.2010 11:03
Как поменять местами элементы в дереве элемента родителя? rar11 Events/DOM/Window 8 01.04.2009 18:53
раскрывать/скрывать <td> при выборе определенного элемента списка zip Элементы интерфейса 2 19.01.2009 13:58
Возникает глюк при использовании двух плагинов dummer jQuery 5 23.12.2008 20:26