scroll events - crocky 1

scroll events refactored using functional programming patterns

HTML

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eu risus magna. Maecenas mauris elit, maximus vel gravida vel, sagittis ut justo. Cras finibus porta urna, sit amet efficitur ex molestie id. Aenean finibus placerat sagittis. Aliquam pulvinar nisl non nisl dictum dictum non at nulla. Phasellus convallis faucibus mauris nec commodo. Cras consequat lacinia consectetur. Cras at lorem justo. In ut ante quis tortor ultricies sagittis ac vitae lacus. In lacinia suscipit arcu, vel commodo leo suscipit et. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed pharetra pharetra lectus, vitae interdum lorem malesuada ut. Praesent gravida neque eget tempus eleifend. Mauris consectetur porttitor scelerisque. Duis consectetur, lacus et varius malesuada, lectus tortor finibus lacus, vulputate porta lectus ipsum nec lacus. Pellentesque facilisis laoreet rutrum. Donec vel tortor id urna sodales pretium non id lorem. Cras id quam sed est fringilla vulputate ac at turpis. Maecenas eget efficitur mi, eu ultricies diam. Vestibulum vehicula mauris vitae luctus pharetra. Phasellus aliquet purus ut commodo tempor. Nam ac elit aliquet, pellentesque arcu nec, lobortis est. Duis orci ex, luctus vitae porttitor at, sagittis a purus. Donec ultricies quis nunc vitae pharetra. Integer aliquam pharetra elit. Suspendisse placerat lacus vitae felis faucibus varius. Integer interdum turpis sed nibh sollicitudin egestas. Phasellus pulvinar nisi purus, non dapibus velit faucibus sed. Nullam ornare vulputate tristique. Cras quis diam urna. Nunc hendrerit rhoncus elit, in tincidunt urna. Sed sollicitudin ex quis est fermentum pharetra. Pellentesque quis sapien fringilla, consectetur risus at, tempor sem. Morbi nec ante eu quam cursus vulputate. Nulla et egestas massa, eget gravida diam. Pellentesque ut condimentum lectus, ac aliquam nibh. Donec volutpat ornare libero ac consequat. Cras mollis purus in nisi iaculis mattis. Quisque consequat volutpat...

JavaScript

function checkf(predf, callback, ms) {
    window.setTimeout(function () {
        if (predf()) {
            callback();
            return;
        }
        checkf(predf, callback, ms);
    }, ms);
}

function afterScrollStops(func) {
    var ms = 100, // interval to perform the scroll position check
        oldX = $(document).scrollLeft(),
        oldY = $(document).scrollTop();

    function startf() {
        $(document).one("scroll", function () {
            checkf(function () {
                 var newX = $(document).scrollLeft(),
                     newY = $(document).scrollTop(),
                     stoppedScrolling = newX === oldX && newY === oldY;
        
                 oldX = newX;
                 oldY = newY;
        
                 return stoppedScrolling;
            }, function () {
                func();
                startf();
            }, ms);
        });
    }
        
    startf();
}

afterScrollStops(function () {
    console.log("user stopped scrolling");
});