52 lines
1.9 KiB
JavaScript
52 lines
1.9 KiB
JavaScript
/* ===============================================================================
|
|
************ Infinite Scroll ************
|
|
=============================================================================== */
|
|
function handleInfiniteScroll() {
|
|
/*jshint validthis:true */
|
|
var inf = $(this);
|
|
var scrollTop = inf[0].scrollTop;
|
|
var scrollHeight = inf[0].scrollHeight;
|
|
var height = inf[0].offsetHeight;
|
|
var distance = inf[0].getAttribute('data-distance');
|
|
var virtualListContainer = inf.find('.virtual-list');
|
|
var virtualList;
|
|
var onTop = inf.hasClass('infinite-scroll-top');
|
|
if (!distance) distance = 50;
|
|
if (typeof distance === 'string' && distance.indexOf('%') >= 0) {
|
|
distance = parseInt(distance, 10) / 100 * height;
|
|
}
|
|
if (distance > height) distance = height;
|
|
if (onTop) {
|
|
if (scrollTop < distance) {
|
|
inf.trigger('infinite');
|
|
}
|
|
}
|
|
else {
|
|
if (scrollTop + height >= scrollHeight - distance) {
|
|
if (virtualListContainer.length > 0) {
|
|
virtualList = virtualListContainer[0].f7VirtualList;
|
|
if (virtualList && !virtualList.reachEnd) return;
|
|
}
|
|
inf.trigger('infinite');
|
|
}
|
|
}
|
|
|
|
}
|
|
app.attachInfiniteScroll = function (infiniteContent) {
|
|
$(infiniteContent).on('scroll', handleInfiniteScroll);
|
|
};
|
|
app.detachInfiniteScroll = function (infiniteContent) {
|
|
$(infiniteContent).off('scroll', handleInfiniteScroll);
|
|
};
|
|
|
|
app.initPageInfiniteScroll = function (pageContainer) {
|
|
pageContainer = $(pageContainer);
|
|
var infiniteContent = pageContainer.find('.infinite-scroll');
|
|
if (infiniteContent.length === 0) return;
|
|
app.attachInfiniteScroll(infiniteContent);
|
|
function detachEvents() {
|
|
app.detachInfiniteScroll(infiniteContent);
|
|
pageContainer.off('pageBeforeRemove', detachEvents);
|
|
}
|
|
pageContainer.on('pageBeforeRemove', detachEvents);
|
|
}; |