Edit in JSFiddle

var DistinctColorManager = function (options) {
    var saturation = "100%",
        lightness = "60%",
        next_hue = 0,
        degrees = 0.6,
        pctRegex = /^(100|([1-9]?[0-9]{1}))%$/,
        degressRegex = /^d+$/,
        me = this;

    options = options || {};
    lightness = options.lightness || lightness;
    saturation = options.saturation || lightness;

    function validatePercentage(val) {
        return pctRegex.test(val);
    }

    function get_hue(idx) {

        /* Here we use 31 bit numbers because JavaScript doesn't have a 32 bit unsigned type, and so the conversion to float would produce a negative value. */
        var bitcount = 31;

        /* Reverse the bits of idx into ridx */
        var ridx = 0,
            i = 0;
        for (i = 0; i < bitcount; i++) {
            ridx = (ridx << 1) | (idx & 1);
            idx >>>= 1;
        }

        /* Divide by 2**bitcount */
        var hue = ridx / Math.pow(2, bitcount);

        /* Start at .6 (216 degrees) */
        return (hue + degrees) % 1;
    }
    return {
        resetHueIndex: function () {
            next_hue = 0;
        },
        setHueIndex: function (val) {
            next_hue = typeof val === 'undefined' || parseInt(val) === NaN ? next_hue : parseInt(val, 10);
        },
        setSaturation: function (val) {
            if (pctRegex.test(val)) {
                saturation = val;
            }
        },
        setDegrees: function (val) {
            if (degressRegex.test(val)) {
                degrees = (parseInt(val, 10) / 350);
            }
        },
        setLightness: function (val) {
            if (pctRegex.test(val)) {
                lightness = val;
            }
        },
        getCurrentHueIndex: function () {
            return next_hue;
        },
        getHSL: function () {
            var hue = Math.round(get_hue(next_hue++) * 360);
            hsl = 'hsl(' + hue + ',' + saturation + ',' + lightness + ')';
            return hsl;
        }

    };
};

var oDCM = DistinctColorManager();


var lis = [];
for (var i = 0; i < 100; i++) {
    var el = document.createElement('li');
    lis.push(el);
    container.appendChild(el);
}

setInterval(function () {
    oDCM.setSaturation((~~ (Math.random() * 100)) + '%');
    //oDCM.setLightness((~~ (Math.random() * 100)) + '%');
    oDCM.setLightness('50%');
    oDCM.setDegrees((~~ (Math.random() * 360)));
    for (i = 0, len = lis.length; i < len; i++) {
        console.log()
        lis[i].style.backgroundColor = oDCM.getHSL();

    }
}, 1000)
<ul id='container'></ul>
ul {
    list-style:none;
}
li {
    width:700px;
    height: 20px;
    transition: background-color 1s linear;
    -webkit-transition:backgroundColor 1s linear;
}