LINUX.ORG.RU

Бесконечная прокрутка с unload

 , ,


0

1

Привет, ребята.

Я пытаюсь реализовать идеальную бесконечную прокрутку, идеальность заключается в удалении узлов ушедших за горизонт, в том числе и для мобильных девайсов. Тут есть разные подходы и разные глюки в итоге.

Варианты которые я пробовал.

1. Использование пустого div сверху в качестве держателя скролла. Когда мы удаляем ушедший за вьюпорт элемент, то мы берем его высоту и прибавляем к высоте пустого div. Тут хотя бы нет моргания при манипуляциях с дом. Но проблема кроется в том, что юзер может загнать вьюпорт на этот пустой div при обратном скролле. Эта проблема особенно актуальна в дефолтном андроидном браузере, там пока анимация скролла не остановится хрен получишь какие эвенты, подход с таймером не спасает от этого случая. То, что юзер загнал вьюпорт на этот пустой div наверное можно как-то решить, если принять какой-то вариант правильным в этом случае.

2. Есть второй подход - запоминать позицию прокрутки и возвращать на неё. Все бы хорошо. юзер особо не поскачет. ибо полоса скролла всегда под контролем, но тут в андроидном браузере и в фоксе проявляются скачки контента на странице при обновлении dom.

3. И есть третий вариант, это использовать div с прокруткой, в этом случае все ведет себя достаточно плавно, кроме фокса, у него жуткие тормоза на прокрутке div в сравнении с прокруткой всей страницы.

Ну и вопрос в том как добиться того чего я хочу? Или может быть я трачу силы зря и современные банано-технологии этого не позволяют и я должен ограничиться тупенькой кнопкой «Load More».

Что касается бесконечной прокрутки, то она в моём случае уместна, я знаю, что её порой не любят.


Ответ на: комментарий от VictimOfLoveToLinux

Ну вопрос в том, что может быть кто-то встречал нормальную реализацию бесконечной прокрутки с удалением ушедших из вьюпорта элементов страницы. Что я смотрел тащит за собой всякие фреймворки и не работает в дефолтном браузере моего древнего андроида.

У бесконечного скролла единственная проблема в том, что в 99% случаев его реализация влечет за собой бесконечный DOM, от этого я и пытаюсь уйти. В конце концов можно имитировать обычную пагинацию, рисовать фигню с номерами страниц и менять урл это не проблема.

На текущий момент я пожалуй останавливаюсь на варианте - вниз бесконечный скролл с удалением лишних узлов сверху, при скролле вверх div который держит прокрутку становится нулевой высоты, происходит скролл вверх и появляется кнопка «мотнуть на шаг назад». Как-то так.

PoMbl4
() автор топика
24 декабря 2017 г.

Бесконечного скрола и не должно быть, это не удобно. Авто подгрузка должна быть только первые 5-10 экранов, дальше через кнопочку(показать ещё). По нажатию на кнопочку, некоторое число(равное подгруженным) элементов сверху удаляем и вешаем аналогичную кнопочку (показать предыдущие). Имитация сохранения скрола в виде тянущегося дива не нужна.

Noob_Linux ★★★★
()
Ответ на: комментарий от PoMbl4

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

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.