Slider step computation
Compute a reasonable step over 155 pixels
by lbstr
HTML
<ul></ul>
JavaScript
var log = function(msg) {
var $log = log.$log || (log.$log = $('ul'));
$log.append('<li>' + msg + '</li>');
};
var f = function(x) {
return Math.pow(10, 3 - Math.ceil(Math.log(x) / Math.LN10));
};
var logf = function(x) {
log("f(" + x.toString() + ") = " + f(x).toString());
};
var loggds = function(min, max) {
log("getDefaultStep(" + min.toString() + ", " + max.toString() + ") = " + getDefaultStep(min, max).toString());
};
var getDefaultStep = function(min, max) {
var range = max - min;
var unrounded = range / 155;
var x = Math.ceil(Math.log(range) / Math.LN10);
var scale = Math.pow(10, 3 - x);
var rounded = Math.ceil(unrounded * scale) / scale;
return rounded;
};
$(function() {
logf(1);
logf(10);
logf(100);
logf(1000);
logf(10000);
logf(100000);
logf(1000000);
logf(10000000);
loggds(0, 1);
loggds(0, 10);
loggds(0, 100);
loggds(0, 1000);
loggds(0, 10000);
loggds(0, 100000);
loggds(0, 1000000);
loggds(0, 10000000);
logf(.9);
logf(9);
logf(99);
logf(999);
logf(9999);
logf(99999);
logf(999999);
logf(9999999);
loggds(0, .9);
loggds(0, 9);
loggds(0, 99);
loggds(0, 999);
loggds(0, 9999);
loggds(0, 99999);
loggds(0, 999999);
loggds(0, 9999999);
logf(1.1);
logf(11);
logf(111);
logf(1111);
logf(11111);
logf(111111);
logf(1111111);
logf(11111111);
loggds(0, 1.1);
loggds(0, 11);
loggds(0, 111);
loggds(0, 1111);
loggds(0, 11111);
loggds(0, 111111);
loggds(0, 1111111);
loggds(0, 11111111);
});