Skip to content

Instantly share code, notes, and snippets.

@kikmedia
Forked from discordier/endlessscroll.js
Created March 25, 2017 12:48
Show Gist options
  • Save kikmedia/660bffc2a624f0df08d5641855089638 to your computer and use it in GitHub Desktop.
Save kikmedia/660bffc2a624f0df08d5641855089638 to your computer and use it in GitHub Desktop.
Endless scrolling for MetaModels content elements.
jQuery(document).ready(function () {
var j= jQuery,
container = '.ce_metamodel_content',
list = '.layout_full',
entry = '.item',
pagination = j('.pagination');
var urls = [],
scrolled = function (elem) {
var
w = j(window), e = j(elem),
docViewTop = w.scrollTop(),
docViewBottom = docViewTop + w.height(),
elemTop = e.offset().top,
elemBottom = elemTop + e.height();
return ((elemBottom <= docViewBottom) && (elemTop >= docViewTop));
},
scroller = function() {
if (scrolled(container)) {
j(document).unbind('scroll');
if (!urls.length) { return; }
var url = urls.pop();
j.get(url, function(data) {
var cont = j(container);
var content = j(data);
j(list, cont).each(function(i, element) {
var scrollable = j(element);
j(list, content).each(function() {
var row =j(this);
if (scrollable.length) {
j(list, scrollable).append(row.clone());
}
});
});
// TODO: execute all javascript we got in this request. To handle MediaBox etc.
if (urls.length) {
j(document).scroll(scroller);
}
});
}
};
var p = j(pagination);
p.find('a.last').each(function(e) {
var pos = this.href.indexOf('page=')+5,
lastPage = this.href.substr(pos),
baseUrl = this.href.substr(0, pos);
for (var i=2;i<=lastPage;i++) {
urls.push(baseUrl + i);
}
});
p.remove();
urls.reverse();
j(document).scroll(scroller);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment