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);
});