views:

1146

answers:

2
+1  Q: 

Logarithmic slider

I have a slider with steps 0-100;

I want the range to be from 100 to 10,000,000.

I've seen some functions scattered around the net but they're all in C++; i need it in javascript.

Any ideas?

+4  A: 

To get the distribution you want, I think you can use this formula:

var value = Math.floor(-900 + 1000*Math.exp(i/10.857255959));

Here's a self-contained page that will print the values you'll get for your 0-100 slider, having passed them through that formula:

<html><body><script>
for (var i = 0; i <= 100; i++) {
    var value = Math.floor(-900 + 1000*Math.exp(i/10.857255959));
    document.write(value + "<br>");
}
</script></body></html>

The numbers go from 100 to 10,000,000 in what looks to my mathematically-rusty eye to be the distribution you want. 8-)

RichieHindle
That worked... how did you derive it?
Started with Math.exp(i) and adjusted by hand until the numbers fit. My maths-fu is weak, but I can binary chop for England. 8-)
RichieHindle
These two answers represents the power of knowledge in mathematics.. This should express to any programmer about the requirement of learning maths.
Vadi
+12  A: 

You can use a function like this:

function logslider(value) {
  // value will be between 0 and 100
  var min = 0;
  var max = 100;

  // The result should be between 100 an 10000000
  var minv = Math.log(100);
  var maxv = Math.log(10000000);

  // calculate adjustment factor
  var scale = (maxv-minv) / (max-min);

  return Math.exp(minv + scale*(value-min));
}

The resulting values match a logarithmic scale:

js> logslider(0);
100.00000000000004
js> logslider(10);
316.22776601683825
js> logslider(20);
1000.0000000000007
js> logslider(40);
10000.00000000001
js> logslider(60);
100000.0000000002
js> logslider(100);
10000000.000000006
sth
+1: So much better than my answer. 8-)
RichieHindle