Предположим, что
1) Дано 5 блоков
2) Область видимости ограничена и содержит известное количество элементов
[ 1 | 2 | 3 | 4 | 5 ]
[] — область видимости
Во время инициальзации нужно клонировать крайние блоки чтобы при прокрутке не возникало пустот:
2 | 3 | 4 | 5 [ 1 | 2 | 3 | 4 | 5 ] 1 | 2 | 3 | 4
Прокручиваем блок, как только доходим ко конца оригинального списка сбрасываем положение на нужны блок. Для примера:
1) 2 | 3 | 4 | 5 [ 1 | 2 | 3 | 4 | 5 ] 1 | 2 | 3 | 4
2) 2 | 3 | 4 | 5 | 1 [ 2 | 3 | 4 | 5 | 1 ] 2 | 3 | 4
3) 2 | 3 | 4 | 5 | 1 | 2 [ 3 | 4 | 5 | 1 | 2 ] 3 | 4
4) 2 | 3 | 4 | 5 | 1 | 2 | 3 [ 4 | 5 | 1 | 2 | 3 ] 4
5) 2 | 3 | 4 | 5 | 1 | 2 | 3 | 4 [ 5 | 1 | 2 | 3 | 4 ]
6) Сброс
7) 2 | 3 | 4 | 5 [ 1 | 2 | 3 | 4 | 5 ] 1 | 2 | 3 | 4
8) ....
Из сложностей/ограничений:
* Все блоки должны располагаться в одном ряду
* Максимальное кол-во блоков может быть ограничено (зависит от браузера, если нужно могу подробнее посмотреть в чем была проблема)
* При изменении размеров области видимости возможны различные некрасивые артефакты, чтобы избежать их — можно динамически менять размер блоков
ЗЫ: С клонирование были какие то сложности, поэтому остановился на такой реализации.