引用iScroll.js实现上拉和下拖刷新

使用技巧

      1、引用iScroll.js, 在初始化时添加两个事件监听:touchMove、DOMContentLoaded。

      2、实现iScroll插件的onScrollEnd事件, 也就是在这个事件里调用你自己的ajax方法实现数据的刷新和追加。

      3、上拉加载更多请求后台时就相当于分页请求数据,这时候需要在ajax请求时发送pageIndex参数,而初始化加载时需要从后台返回一个pageCount以便前台判断。

      4、最关键的就是实现下拉刷新方法(pullDownAction)和上拉加载更多(pullUpAction)方法。

效果图

 实现方法

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 );

转载于:https://www.cnblogs.com/qw26213/p/5455598.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值