Le problème avec un véritable curseur logarithmique est qu'à l'extrémité inférieure, des points multiples sur le curseur entraîneront probablement des valeurs doubles.
Du point de vue de l'interface utilisateur, il ne fournit pas non plus une sortie très intuitive pour l'entrée des utilisateurs.
Je pense qu'une meilleure option est d'utiliser une transformation "étagée" à distribution égale.
En d'autres termes, nous spécifions une série d'incréments que nous voulons utiliser (ex : 1, 10, 100, 1000). Ensuite, nous divisons le curseur en parties égales sur la base du nombre d'incréments que nous avons défini. Lorsque nous glissons à travers nos différentes sections, la sortie du curseur sera incrémentée par l'incrément respectif.
DÉMO DE TRAVAIL
CODE DE RÉACTION
Dans l'exemple ci-dessus, nous définissons notre min
, max
& intervals
le tableau.
<ExpoStepSlider
intervals={[1, 2, 5, 10, 100, 1000]}
min={1}
max={50000}
/>
Nous devons ensuite trouver le nombre de valeurs discrètes que doit avoir notre curseur pour qu'il aille correctement de min à max sur la base de nos distributions d'intervalles définies.
let sliderPoints = Math.ceil(
(max - min) /
intervals.reduce((total, interval) => total + interval / intervals.length, 0)
);
Dans ce cas 535
.
Note : Les points de votre curseur ne doivent pas dépasser le nombre de pixels du curseur.
Enfin, nous transformons simplement notre sortie en utilisant l'algorithme décrit ci-dessus. L'exemple de code effectue également un travail pour que la sortie soit toujours ronde pour l'intervalle de pas actuel.