Infinite Scroll

by khrome

HTML

dskhs djkhsdkhdjhfdsjkdhjfksdh fjksdh kjdhfksdjfh jkhjksdhf kjdsh hdkjfh kjsdhf jkdhf jkdh fdskhs djkhsdk dskhs djkhsdkhdjhfdsjkdhjfksdh fjksdh kjdhfksdjfh jkhjksdhf kjdsh hdkjfh kjsdhf jkdhf jkdh fhdjhfds jkdhdskhs djkhsdkhdjhfdsj kdhjdskhs djkhsdkhdjhfdsjkdhjfksdh fjksdh kjdhfksdjfh jkhjksdhf kjdsh hdkjfh kjsdhf jkdhf jkdh ffksdh fjksdh kjdhfksdjfh jkhjksdhf kjdsh hdkjfh kjsdhf jkdhf jkdh fjfksdh fjksdh kjdhfksdjfh jkhjksdhf kjdsh hdkjfh kjsdhf jkdhf jkdh fdskhs djkhsdkhdjhfdsjkdhjfksdh fjksdh kjdhfkdskhs djkhsdkhdjhfdsjkdhjfksdh fjksdh kjdhfksdjfh jkhjksdhf kjdsh hdkjfh kjsdhf jkdhf jkdh fsdjfh jkhjksdhf kjdsh hdkjfh kjsdhf jkdhf jkdh fdskhs djkhsdkhddskhs djkhsddskhs djkhsdkhdjhfdsjkdhjfksdh fjksdh kjdhfksdjfh jkhjksdhf kjdsh hdkjfh kjsdhf jkdhf jkdh fkhdjhfdsjdskhs djkhsdkhdjhfdsjkdhjfksdh fjksdh kjdhfksdjfh jkhjksdhf kjdsh hdkjfh kjsdhf jkdhf jkdh fkdhjfksdh fjksdh kjdhfksdjfh jkhjksdhf kjdsh hdkjfh kjsdhf jkdhf jkdh fjhfdsjkdhjfksdh fjksdh kjdhfksdjfh jkdskhs djkhsdkhdjhfdsjkdhjfksdh fjksdh kjdhfksdjfh jkhjksdhf kjdsh hdkjfh kjsdhf jkdhf jkdh fhjksdhf kjdsh hdkjfh kjsdhf jkdhf jkdh fdskhs djkh sdkhdjhfdsjkdhjfksdh fjksdh kjdhfksdjfh jkhjksdhf kjdsh hdkjfh kjsdhf jkdhf jkdh fdskhs djkhsdkhd dskhs djkhsdkhdjhfdsjkdhjfksdh fjksdh kjdhfksdjfh jkhjksdhf kjdsh hdkjfh kjsdhf jkdhf jkdh fjhfdsjkdhjfksdh fjksdh kjdhfksdjfh jkhjksdhf kjdsh hdkjfh kjsdhf jkdhf jkdh fdskhs d jkhsdkhdjh fdsjkdhjfksdh fjksdh kdskhs djkhsdkhdjhfdsjkdhjfksdh fjksdh kjdhfksdjfh jkhjksdhf kjdsh hdkjfh kjsdhf jkdhf jkdh fjdhfksdjfh jkhjksdhf kjdsh hdkjfh kjsdhf jkdhf jkdh fdskhs djkhsdkhdjhfdsjkdhjfksdh fjksdh kjdhfksdjfh jkhjksdhf kjdsh hdkjfh kjsdhf jkdhf jkdh f

JavaScript

var text = document.body.innerText;
window.scroll = {};
window.scroll.infinite = function(options){
    if(!options) options = {};
    
    var jDocument = $(document);
    var jWindow = $(window);
    var winHeight = jWindow.height();
    var responder = {};
    var scrollListener = function(event) {
        var top = jDocument.scrollTop();
        var docHeight = jDocument.height();
        if(!responder.start){
            responder.start = (new Date()).getTime();
            var newEvent = new UIEvent('infinite-scroll', {
            	bubbles : true,
              cancelable :true
            });
            newEvent.complete = function(){
                delete responder.start;
            }
            newEvent.top = top;
            newEvent.bottom = top + winHeight;
            newEvent.remaining = jDocument.height() - newEvent.bottom;
            window.dispatchEvent(newEvent);
        }else{
            if((new Date()).getTime() - responder.start > (options.timer || 5000)) return responder = {};
        }
    }
    var extentListener = function(event){
        var doc = jDocument.height();
        if(doc - jDocument.scrollTop() + winHeight > (options.threshold || winHeight)){
            scrollListener.apply(this, arguments);
        }
    }
    window.addEventListener('scroll', extentListener, false);
}

window.scroll.infinite();

window.addEventListener('infinite-scroll', function(event){
    console.log('infinite', event);
    document.body.innerHTML += text;
}, false);