Здесь один для реальных гениев JQuery UI: у нас очень длинная форма с разделами, загружаемыми по требованию (например, при щелчке по индексу/навигации или при прокрутке рядом с краями текущего раздела).
Когда я загружаю разделы ниже просматриваемого в данный момент раздела, это не влияет на текущую позицию прокрутки (т.е. scrollTop), но когда я вставляю новые разделы выше текущего просматриваемого раздела, он, конечно, подталкивает просмотренный контент вниз.
Нам нужно поддерживать положение scrollTop относительно текущего раздела. Нам также необходимо избегать прыжка/сгибания дисплея при выполнении настроек.
Параметры, которые мы рассматриваем:
- Загрузите контент и настройте положение scrollTop на высоту загруженного элемента (это, вероятно, сбой плохо, так как изменение DOM потенциально намного медленнее, чем настройка scrollTop).
- Загрузите новый раздел за кадром, измерьте высоту. Затем вставьте раздел и отредактируйте scrollTop на эту сумму (возможно, все еще сбой из-за обновления DOM).
- Установите загружаемый раздел на большую фиксированную высоту (например, 100/1000 пикселей) и отрегулируйте scrollTop так, чтобы текущий вид не перемещался. Загрузите содержимое в этот раздел, затем измерьте фактическую высоту содержимого и удалите фиксированную высоту, при этом отрегулируйте scrollTop, чтобы она соответствовала фактической высоте.
- Не используйте традиционную прокрутку, а создавайте собственный скроллер, который поддерживает собственные относительные смещения и перемещает существующие разделы отдельно, чтобы соответствовать новым. Затем возникает проблема с записью пользовательской замены прокрутки (для чего-то вроде nicescroll, который мы используем).
- Временно измените положение текущего просматриваемого участка (ов) на абсолютное (положение, вычисленное по смещению экрана), чтобы вывести его из потока. Обновите содержимое родительского прокручивающего окна за ним, а затем снова просмотрите раздел после повторного вычисления нового scrollTop.
- Что-то еще, о чем мы не думали?
Я хотел бы получить предложения от кого-то, кто действительно должен был решить эту проблему. Важно, чтобы экран не сбой, поэтому следует избегать синхронизации scrollTop с медленным обновлением DOM.
Предложения или комментарии по предлагаемым решениям? Есть ли замена прокрутки, которая сделает это уже?
Если вы не можете его решить, но подумайте, что стоит решить, подумайте о том, чтобы выжить, чтобы я мог наложить на него большую награду!:)