Сначала получите offset
, если value
меньше, чем minValue
, возьмите maxValue
, в противном случае minValue
.
Затем настройте value
со смещением, возьмите остаток с помощью count
пунктов и используйте смещение для получения значения в требуемом диапазоне.
function infiniteCarousel(value, minValue, maxValue) {
var count = maxValue - minValue + 1,
offset = value <= minValue ? maxValue : minValue;
return (value - offset) % count + offset;
}
var array = [];
for (var i = -10; i < 10; i++) array.push(infiniteCarousel(i, -2, 3));
console.log(...[2, 3, -2, -1, 0, 1, 2, 3, -2, -1, 0, 1, 2, 3, -2, -1, 0, 1, 2, 3]);
console.log(...array);
array = [];
for (var i = -10; i < 10; i++) array.push(infiniteCarousel(i, 2, 6));
console.log(...[5, 6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 2, 3, 4]);
console.log(...array);