Столкнулся с проблемой, что плагин 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 модулей, в которую не хотелось вмешиваться.