Проблема с истинным логарифмическим ползунком заключается в том, что на нижнем уровне несколько точек ползунка часто приводят к дублированию значений.
С точки зрения чисто пользовательского интерфейса, он также не обеспечивает очень интуитивно понятного вывода для пользовательского ввода.
Я думаю, что лучшим вариантом является использование «ступенчатого» преобразования с равномерным распределением.
Другими словами, мы указываем серию приращений, которые мы хотим использовать (например: 1, 10, 100, 1000). Затем мы разбиваем ползунок на равные части в зависимости от количества определенных приращений. Когда мы перемещаемся по разным разделам, вывод ползунка будет увеличиваться на соответствующий шаг.
РАБОЧИЙ ДЕМО
РЕАКТИВНЫЙ КОД
В приведенном выше примере мы определяем наш массив min
, max
& intervals
.
<ExpoStepSlider
intervals={[1, 2, 5, 10, 100, 1000]}
min={1}
max={50000}
/>
Затем мы должны найти количество дискретных значений, которые должен иметь наш ползунок, чтобы он должным образом переходил от минимального к максимальному на основе наших определенных распределений интервалов.
let sliderPoints = Math.ceil(
(max - min) /
intervals.reduce((total, interval) => total + interval / intervals.length, 0)
);
В этом случае 535
.
Примечание : количество точек слайдера не должно превышать количество пикселей в слайдере
Наконец, мы просто преобразуем наш вывод, используя алгоритм, описанный выше. Пример кода также выполняет некоторую работу, поэтому выходные данные всегда округляются для текущего интервала шага.