Das Problem mit einem echten logarithmischen Schieberegler liegt am unteren Ende. Mehrere Punkte auf dem Schieberegler führen wahrscheinlich zu doppelten Werten.
Aus rein UI-Sicht bietet es auch keine sehr intuitive Ausgabe für die Benutzereingaben.
Ich denke, eine bessere Option ist die Verwendung einer "gestuften" Transformation mit gleichmäßiger Verteilung.
Mit anderen Worten, wir geben eine Reihe von Inkrementen an, die wir verwenden möchten (z. B. 1, 10, 100, 1000). Dann teilen wir den Schieberegler basierend auf der Anzahl der von uns definierten Inkremente in gleiche Teile. Wenn wir durch unsere verschiedenen Abschnitte gleiten, wird die Schiebereglerausgabe um das jeweilige Inkrement erhöht.
ARBEITSDEMO
REAKTIEREN SIE DEN CODE
Im obigen Beispiel definieren wir unseren min
, max
und intervals
Array.
<ExpoStepSlider
intervals={[1, 2, 5, 10, 100, 1000]}
min={1}
max={50000}
/>
Wir müssen dann die Anzahl der diskreten Werte ermitteln, die unser Schieberegler haben muss, damit er basierend auf unseren definierten Intervallverteilungen ordnungsgemäß von min nach max wechselt.
let sliderPoints = Math.ceil(
(max - min) /
intervals.reduce((total, interval) => total + interval / intervals.length, 0)
);
In diesem Fall 535
.
Hinweis : Ihre Schiebereglerpunkte sollten die Anzahl der Pixel im Schieberegler nicht überschreiten
Schließlich transformieren wir unsere Ausgabe einfach mit dem oben beschriebenen Algorithmus. Das Codebeispiel erledigt auch einige Arbeiten, sodass die Ausgabe für das aktuelle Schrittintervall immer rund ist.