Как ограничить число диапазоном
Короткий ответ
Math.max() поднимает число до минимума, а Math.min() опускает до максимума:
const clamp = (value, min, max) => Math.min(Math.max(value, min), max);
console.log(clamp(150, 0, 100));
console.log(clamp(-5, 0, 100));
console.log(clamp(42, 0, 100));Результат:
100
0
42По кругу
Иногда значение должно идти по кругу, как номера слайдов в галерее. Поможет остаток от деления:
const count = 5;
const wrap = (index) => ((index % count) + count) % count;
console.log(wrap(5), wrap(-1), wrap(7));Результат:
0 4 2Частая ошибка
Порядок важен: если перепутать min и max в формуле, результатом всегда будет минимум:
const wrongClamp = (value, min, max) => Math.max(Math.min(value, min), max);
console.log(wrongClamp(50, 0, 100));Результат:
100