Для клиентов

Логин:
Пароль:

Загруженность

02.12.2024 - 12.12.2024

Календарь

Ссылки по теме

jScrollPane - не показывает содержимое до конца

Заметки на полях

Столкнулся с проблемой, что плагин jScrollPane (для jQuery), созданный для замены стандартных полос прокрутки (scrollbar-ов)  не всегда пролистывает содержимое блока до самого низа. Т.е. возникает ситуация, когда содержимое блока еще есть, а прокрутка уже дошла до крайней нижней позиции.

На простых дизайнах этого вроде не возникает. Firefox и Opera показывали все на ура, а вот Chrome и IE не хотели.

Были предприняты следующие шаги:

  • Фиксирование блока для прокрутки по ширине и высоте (многие плагины плохо переваривают изменяемость таких параметров).
  • Проверка того, что сам браузер корректно вычисляет высоту блока.
  • Добавление к блоку отсутпов, переводов строки снизу не дали нужного результата -- прокрутка стала уходить дальше,
  • Проверка корректности HTML-кода - иногда незакрытый тэг вызывает разную восприимчивость различных браузеров
  • Обновил jQuery и сам плагин до той версии, до которой позволил проект (часть сторонних плагинов отказлаись работать под jQuery старше 1.6.2)

После этого было принято решение лезть в код плагина, чтобы выяснять, как рассчитывается шаг прокрутки, минимальные и максимальные значения. 

В ходе экспериментов было выявлено, что иногда Chrome все-таки срабатывает правильно, но при обновлении страницы опять сбивается на неправильное отображение.

В ходе просмотра исходного кода я встретил параметр плагина: autoReinitialise, который вызывает обновление параметров блока, через некоторый промежуток времени (этот промежуток задается параметром autoReinitialiseDelay). Наличие такого параметра и факт того, что иногда Chrome все же показывал правильно, навело меня на следующее умозаключение:

Инициализация объекта происходит до того, как сформировалась окончательная высота блока (до завершения загрузки картинок и пр. переменных по высоте блоков). Это приводит к неправильным рассчетам внутри плагина. Переинициализаця помогает предотвратить это.

После переключения этого параметра, все стало работать как часы!

В код инициализации был изменен на:

$('.scrollbar').jScrollPane({
     autoReinitialise : true
});

 

PS. Не исключено, что при инициализации плагина через событий onLoad, такой проблемы бы не возникло. Но создатели дизайн-макета придумали свою сверх естественную систему инициализации различных java-script модулей, в которую не хотелось вмешиваться.

ФИО*:
email*:
Отзыв*:
Код*
# Кирилл ответить
Большое спасибо, много мне нервов это помотало, оказалось все просто, причем я решал это тем что прописывал высоту всем картинкам...
19/12/2016 16:12:15
# R ответить
Большое спасибо, возникла подобная проблема при динамическом добавлении элементов.
Добавление "autoReinitialise : true" решило проблему
13/04/2015 18:51:13