使用技巧javascript
一、引用iScroll.js, 在初始化時添加兩個事件監聽:touchMove、DOMContentLoaded。java
二、實現iScroll插件的onScrollEnd事件, 也就是在這個事件裏調用你本身的ajax方法實現數據的刷新和追加。ajax
三、上拉加載更多請求後臺時就至關於分頁請求數據,這時候須要在ajax請求時發送pageIndex參數,而初始化加載時須要從後臺返回一個pageCount以便前臺判斷。app
四、最關鍵的就是實現下拉刷新方法(pullDownAction)和上拉加載更多(pullUpAction)方法。post
效果圖this
實現方法spa
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
100
101
102
103
|
var
myScroll,
pullDownEl, pullDownOffset,
pullUpEl, pullUpOffset,
generatedCount = 0;
/**
* 下拉刷新 (自定義實現此方法)
* myScroll.refresh(); 數據加載完成後,調用界面更新方法
*/
function
pullDownAction () {
setTimeout(
function
() {
var
el, li, i;
el = document.getElementById(
'thelist'
);
for
(i=0; i<3; i++) {
li = document.createElement(
'li'
);
li.innerText =
'Generated row '
+ (++generatedCount);
el.insertBefore(li, el.childNodes[0]);
}
myScroll.refresh();
//數據加載完成後,調用界面更新方法
}, 1000);
}
/**
* 滾動翻頁 (自定義實現此方法)
* myScroll.refresh(); // 數據加載完成後,調用界面更新方法
*/
function
pullUpAction () {
setTimeout(
function
() {
// <-- Simulate network congestion, remove setTimeout from production!
var
el, li, i;
el = document.getElementById(
'thelist'
);
for
(i=0; i<3; i++) {
li = document.createElement(
'li'
);
li.innerText =
'Generated row '
+ (++generatedCount);
el.appendChild(li, el.childNodes[0]);
}
myScroll.refresh();
//數據加載完成後,調用界面更新方法
}, 1000);
}
/**
* 初始化iScroll控件
*/
function
loaded() {
pullDownEl = document.getElementById(
'pullDown'
);
pullDownOffset = pullDownEl.offsetHeight;
pullUpEl = document.getElementById(
'pullUp'
);
pullUpOffset = pullUpEl.offsetHeight;
myScroll =
new
iScroll(
'wrapper'
, {
scrollbarClass:
'myScrollbar'
,
useTransition:
false
,
topOffset: pullDownOffset,
onRefresh:
function
() {
if
(pullDownEl.className.match(
'loading'
)) {
pullDownEl.className =
''
;
pullDownEl.querySelector(
'.pullDownLabel'
).innerHTML =
'下拉刷新...'
;
}
else
if
(pullUpEl.className.match(
'loading'
)) {
pullUpEl.className =
''
;
pullUpEl.querySelector(
'.pullUpLabel'
).innerHTML =
'上拉加載更多...'
;
}
},
onScrollMove:
function
() {
if
(
this
.y > 5 && !pullDownEl.className.match(
'flip'
)) {
pullDownEl.className =
'flip'
;
pullDownEl.querySelector(
'.pullDownLabel'
).innerHTML =
'鬆手開始更新...'
;
this
.minScrollY = 0;
}
else
if
(
this
.y < 5 && pullDownEl.className.match(
'flip'
)) {
pullDownEl.className =
''
;
pullDownEl.querySelector(
'.pullDownLabel'
).innerHTML =
'下拉刷新...'
;
this
.minScrollY = -pullDownOffset;
}
else
if
(
this
.y < (
this
.maxScrollY - 5) && !pullUpEl.className.match(
'flip'
)) {
pullUpEl.className =
'flip'
;
pullUpEl.querySelector(
'.pullUpLabel'
).innerHTML =
'鬆手開始更新...'
;
this
.maxScrollY =
this
.maxScrollY;
}
else
if
(
this
.y > (
this
.maxScrollY + 5) && pullUpEl.className.match(
'flip'
)) {
pullUpEl.className =
''
;
pullUpEl.querySelector(
'.pullUpLabel'
).innerHTML =
'上拉加載更多...'
;
this
.maxScrollY = pullUpOffset;
}
},
onScrollEnd:
function
() {
if
(pullDownEl.className.match(
'flip'
)) {
pullDownEl.className =
'loading'
;
pullDownEl.querySelector(
'.pullDownLabel'
).innerHTML =
'加載中...'
;
pullDownAction();
// ajax call
}
else
if
(pullUpEl.className.match(
'flip'
)) {
pullUpEl.className =
'loading'
;
pullUpEl.querySelector(
'.pullUpLabel'
).innerHTML =
'加載中...'
;
pullUpAction();
// ajax call
}
}
});
setTimeout(
function
() { document.getElementById(
'wrapper'
).style.left =
'0'
; }, 800);
}
//初始化綁定iScroll控件
document.addEventListener(
'touchmove'
,
function
(e) { e.preventDefault(); },
false
);
document.addEventListener(
'DOMContentLoaded'
, loaded,
false
);
|