Приветствую,
Сразу начну с примера, т.к. что-то описание большое получилось:
-
https://jsfiddle.net/orlov0562/d6hnxqtk/
- Надо чтобы, при нажатии на "Load 10", перемотка была к посту отмеченному синим
Исходные данные:
- Есть лента, в неё грузятся элементы-посты, содержащие в себе картинку + текст
- Картинка масштабируется по ширине ленты и ее высота заранее неизвестна. Т.е. высота элемента "пост", неизвестна пока не загрузится картинка.
- Вверху ленты есть кнопка "Показать новые посты"
Задача: Нужно при нажатии на кнопку "Показать новые посты", загрузить эти посты и вернуться к первому элементу ленты, который был отображен до нажатия кнопки. А точнее, задача в целом, даже не вернуться, а оставить его в той же позиции на экране, при этом добавив постов сверху.
Проблема: До загрузки изображений, мы не можем скроллить обратно к первому посту, т.к. не знаем где он в итоге окажется, по причине того, что загруженное изображение изменяет высоту постов сверху и соответственно значение на которое надо перематывать.
Варианты решений, которые я вижу:
1) Где-то хранить высоту изображения, чтобы до его загрузки (и даже на случай ошибки его загрузки), можно было высчитать высоту. К сожалению, сейчас этого параметра нет.
2) Есть еще вариант, с перемоткой после отслеживания onload у всех изображений. Но, он выглядит дико, если представить одновременную загрузку, например 50 gif-ок по 10-20 мб каждая.
Пример: https://jsfiddle.net/orlov0562/d6hnxqtk/
- Демонстрация проблемы: Нажми "Load 10"
- Как должно работать: Нажми "Load 10 (delayed)"
Вопрос: Как вернуться в позицию элемента (или остаться в ней), после добавлении новых элементов выше него, при условии, что это надо сделать в момент когда высота новых элементов может меняться?