dropload.min.js
5.8 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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/**
* dropload
* 西门(http://ons.me/526.html)
* 0.9.1(161205)
*/
!function (a) {
"use strict";
function g(a) {
a.touches || (a.touches = a.originalEvent.touches)
}
function h(a, b) {
b._startY = a.touches[0].pageY, b.touchScrollTop = b.$scrollArea.scrollTop()
}
function i(b, c) {
c._curY = b.touches[0].pageY, c._moveY = c._curY - c._startY, c._moveY > 0 ? c.direction = "down" : c._moveY < 0 && (c.direction = "up");
var d = Math.abs(c._moveY);
"" != c.opts.loadUpFn && c.touchScrollTop <= 0 && "down" == c.direction && !c.isLockUp && (b.preventDefault(), c.$domUp = a("." + c.opts.domUp.domClass), c.upInsertDOM || (c.$element.prepend('<div class="' + c.opts.domUp.domClass + '"></div>'), c.upInsertDOM = !0), n(c.$domUp, 0), d <= c.opts.distance ? (c._offsetY = d, c.$domUp.html(c.opts.domUp.domRefresh)) : d > c.opts.distance && d <= 2 * c.opts.distance ? (c._offsetY = c.opts.distance + .5 * (d - c.opts.distance), c.$domUp.html(c.opts.domUp.domUpdate)) : c._offsetY = c.opts.distance + .5 * c.opts.distance + .2 * (d - 2 * c.opts.distance), c.$domUp.css({height: c._offsetY}))
}
function j(b) {
var c = Math.abs(b._moveY);
"" != b.opts.loadUpFn && b.touchScrollTop <= 0 && "down" == b.direction && !b.isLockUp && (n(b.$domUp, 300), c > b.opts.distance ? (b.$domUp.css({height: b.$domUp.children().height()}), b.$domUp.html(b.opts.domUp.domLoad), b.loading = !0, b.opts.loadUpFn(b)) : b.$domUp.css({height: "0"}).on("webkitTransitionEnd mozTransitionEnd transitionend", function () {
b.upInsertDOM = !1, a(this).remove()
}), b._moveY = 0)
}
function k(a) {
"" != a.opts.loadDownFn && a.opts.autoLoad && a._scrollContentHeight - a._threshold <= a._scrollWindowHeight && m(a)
}
function l(a) {
a._scrollContentHeight = a.opts.scrollArea == b ? e.height() : a.$element[0].scrollHeight
}
function m(a) {
a.direction = "up", a.$domDown.html(a.opts.domDown.domLoad), a.loading = !0, a.opts.loadDownFn(a)
}
function n(a, b) {
a.css({"-webkit-transition": "all " + b + "ms", transition: "all " + b + "ms"})
}
var f, b = window, c = document, d = a(b), e = a(c);
a.fn.dropload = function (a) {
return new f(this, a)
}, f = function (a, b) {
var c = this;
c.$element = a, c.upInsertDOM = !1, c.loading = !1, c.isLockUp = !1, c.isLockDown = !1, c.isData = !0, c._scrollTop = 0, c._threshold = 0, c.init(b)
}, f.prototype.init = function (f) {
var l = this;
l.opts = a.extend(!0, {}, {
scrollArea: l.$element,
domUp: {
domClass: "dropload-up",
domRefresh: '<div class="dropload-refresh">↓下拉刷新</div>',
domUpdate: '<div class="dropload-update">↑释放更新</div>',
domLoad: '<div class="dropload-load"><span class="loading"></span>加载中...</div>'
},
domDown: {
domClass: "dropload-down",
domRefresh: '<div class="dropload-refresh">↑上拉加载更多</div>',
domLoad: '<div class="dropload-load"><span class="loading"></span>加载中...</div>',
domNoData: '<div class="dropload-noData">暂无数据</div>'
},
autoLoad: !0,
distance: 50,
threshold: "",
loadUpFn: "",
loadDownFn: ""
}, f), "" != l.opts.loadDownFn && (l.$element.append('<div class="' + l.opts.domDown.domClass + '">' + l.opts.domDown.domRefresh + "</div>"), l.$domDown = a("." + l.opts.domDown.domClass)), l._threshold = l.$domDown && "" === l.opts.threshold ? Math.floor(1 * l.$domDown.height() / 3) : l.opts.threshold, l.opts.scrollArea == b ? (l.$scrollArea = d, l._scrollContentHeight = e.height(), l._scrollWindowHeight = c.documentElement.clientHeight) : (l.$scrollArea = l.opts.scrollArea, l._scrollContentHeight = l.$element[0].scrollHeight, l._scrollWindowHeight = l.$element.height()), k(l), d.on("resize", function () {
clearTimeout(l.timer), l.timer = setTimeout(function () {
l._scrollWindowHeight = l.opts.scrollArea == b ? b.innerHeight : l.$element.height(), k(l)
}, 150)
}), l.$element.on("touchstart", function (a) {
l.loading || (g(a), h(a, l))
}), l.$element.on("touchmove", function (a) {
l.loading || (g(a, l), i(a, l))
}), l.$element.on("touchend", function () {
l.loading || j(l)
}), l.$scrollArea.on("scroll", function () {
l._scrollTop = l.$scrollArea.scrollTop(), "" != l.opts.loadDownFn && !l.loading && !l.isLockDown && l._scrollContentHeight - l._threshold <= l._scrollWindowHeight + l._scrollTop && m(l)
})
}, f.prototype.lock = function (a) {
var b = this;
void 0 === a ? "up" == b.direction ? b.isLockDown = !0 : "down" == b.direction ? b.isLockUp = !0 : (b.isLockUp = !0, b.isLockDown = !0) : "up" == a ? b.isLockUp = !0 : "down" == a && (b.isLockDown = !0, b.direction = "up")
}, f.prototype.unlock = function () {
var a = this;
a.isLockUp = !1, a.isLockDown = !1, a.direction = "up"
}, f.prototype.noData = function (a) {
var b = this;
void 0 === a || 1 == a ? b.isData = !1 : 0 == a && (b.isData = !0)
}, f.prototype.resetload = function () {
var b = this;
"down" == b.direction && b.upInsertDOM ? b.$domUp.css({height: "0"}).on("webkitTransitionEnd mozTransitionEnd transitionend", function () {
b.loading = !1, b.upInsertDOM = !1, a(this).remove(), l(b)
}) : "up" == b.direction && (b.loading = !1, b.isData ? (b.$domDown.html(b.opts.domDown.domRefresh), l(b), k(b)) : b.$domDown.html(b.opts.domDown.domNoData))
}
}(window.Zepto || window.jQuery);