Strippets.prototype.startAutoCentering = function()

in lib/@uncharted/strippets/src/strippets.js [509:540]


Strippets.prototype.startAutoCentering = function() {
    var s = this;
    if (s.$viewport.hasClass(s.classes.container.autoCenter)) {
        return;
    }
    s.$viewport.addClass(s.classes.container.autoCenter);
    var viewPortWidth = s.$viewport.width();
    var maxScrollPosition = s.$viewport[0].scrollWidth - viewPortWidth;
    var endTimer;
    // Watch for scrollWidth change and set scroll position accordingly.
    var scrollWidthWatcher = setInterval(function() {
        var currentPosition = s.$viewport[0].scrollLeft;
        var newMaxScrollPosition = s.$viewport[0].scrollWidth - viewPortWidth;
        var targetPosition = newMaxScrollPosition / 2;
        var diff = Math.abs((maxScrollPosition - newMaxScrollPosition)) * 0.5;
        if (maxScrollPosition === newMaxScrollPosition) {
            return;
        }
        if (currentPosition < targetPosition) {
            s.$viewport[0].scrollLeft += diff;
        } else if (currentPosition > targetPosition) {
            s.$viewport[0].scrollLeft -= diff;
        }
        maxScrollPosition = newMaxScrollPosition;
        // Kill the watcher if no scroll width change is detected for 100 ms.
        clearTimeout(endTimer);
        endTimer = setTimeout(function() {
            clearInterval(scrollWidthWatcher);
            s.$viewport.removeClass(s.classes.container.autoCenter);
        }, 100);
    }, 0);
};