This repository has been archived by the owner on Nov 10, 2017. It is now read-only.
/
jquery.infinitescroll.js
59 lines (55 loc) · 2.31 KB
/
jquery.infinitescroll.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
// Infinite Scroll
(function($) {
$.fn.infinitescroll = function(options) {
return $(this).each(function() {
var el = $(this);
var settings = $.extend({
url: null,
triggerAt: 300,
page: 2,
appendTo: '.list tbody',
container: $(document)
}, options);
var req = null;
var maxReached = false;
var infinityRunner = function() {
if (settings.url !== null) {
if (settings.force || (settings.triggerAt >= (settings.container.height() - el.height() - el.scrollTop()))) {
settings.force = false;
// if the request is in progress, exit and wait for it to finish
if (req && req.readyState < 4 && req.readyState > 0) {
return;
}
$(settings.appendTo).trigger('infinitescroll.beforesend');
req = $.get(settings.url, 'page='+settings.page, function(data) {
if (data !== '') {
if (settings.page > 1) {
$(settings.appendTo).append(data);
} else {
$(settings.appendTo).html(data);
}
settings.page++;
$(settings.appendTo).trigger('infinitescroll.finish');
} else {
maxReached = true;
$(settings.appendTo).trigger('infinitescroll.maxreached');
}
}, 'html');
}
}
};
el.bind('infinitescroll.scrollpage', function(e, page) {
settings.page = page;
settings.force = true;
infinityRunner();
});
el.scroll(function(e) {
if (!maxReached) {
infinityRunner();
}
});
// Test initial page layout for trigger
infinityRunner();
});
};
})(jQuery);