-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinfinite-scroll.js
More file actions
61 lines (58 loc) · 1.64 KB
/
infinite-scroll.js
File metadata and controls
61 lines (58 loc) · 1.64 KB
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
60
61
$(function() {
app.init();
})
var app={};
app.setScrollTimeout = function() { app.scrollTimeout = setInterval(app.scrollListener, 1); }
app.scrollSubject = null;
app.getScrollSubject = function() {
var collection = document.getElementsByClassName("scroller");
app.scrollSubject = collection[0];
}
app.scrollListener = function() {
var pos = app.scrollSubject.scrollTop,
scrollHeight = app.scrollSubject.scrollHeight,
containerHeight = app.scrollSubject.offsetHeight;
gap = 50;
if(pos+gap+containerHeight >= scrollHeight) {
app.scrollSubject.dispatchEvent(app.events.atBottom);
}
if(pos-gap<=0) {
app.scrollSubject.dispatchEvent(app.events.atTop);
};
}
app.makeBlank = function(what) {
var h = $(what).height(),
w = $(what).width(),
$div = $("<div/>");
$div.height(h);
$div.width(w);
$div.addClass("blank");
return $div;
}
app.init = function() {
app.getScrollSubject();
app.setScrollTimeout();
app.scrollSubject.addEventListener("scrollAtBottom", app.handlers.atBottom, false)
app.scrollSubject.addEventListener("scrollAtTop", app.handlers.atTop, false)
}
app.events={};
app.events.atBottom = new CustomEvent(
"scrollAtBottom",
{ bubbles: false,
cancelable: false }
);
app.events.atTop = new CustomEvent(
"scrollAtTop",
{ bubbles: false,
cancelable: false }
);
app.handlers={};
app.handlers.atBottom = function() {
var first = document.getElementsByClassName("first");
var $blank = app.makeBlank(first[0]);
$(".first").wrap($blank);
$(".blank > *").removeClass("first").appendTo(app.scrollSubject);
$(".block").eq(0).addClass("first")
}
app.handlers.atTop = function() {
}