• MUI实现上拉加载和下拉刷新


    编写存储过程分页(此处使用T-SQL)

     1 CREATE PROC [dbo].[Common_PageList]
     2 (
     3 @tab nvarchar(max),---表名
     4 @strFld nvarchar(max), --字段字符串
     5 @strWhere varchar(max), --where条件 
     6 @PageIndex int, --页码
     7 @PageSize int, --每页容纳的记录数
     8 @Sort VARCHAR(255), --排序字段及规则,不用加order by
     9 @IsGetCount bit  --是否得到记录总数,1为得到记录总数,0为不得到记录总数,返回记录集
    10 )
    11 AS
    12 declare @strSql nvarchar(max)
    13 set nocount on;
    14 if(@IsGetCount = 1)
    15 begin
    16  set @strSql='SELECT COUNT(0) FROM ' + @tab + ' WHERE ' + @strWhere
    17 end
    18 else
    19 begin
    20   set @strSql=' SELECT * FROM (SELECT ROW_NUMBER() 
    21   OVER(ORDER BY ' + @Sort + ') AS rownum, ' + @strFld + ' FROM ' + @tab + ' where ' + @strWhere + ') AS Dwhere
    22   WHERE rownum BETWEEN ' + CAST(((@PageIndex-1)*@PageSize + 1) as nvarchar(20)) + ' and ' + cast((@PageIndex*@PageSize) as nvarchar(20))
    23 end
    24 
    25 print @strSql
    26 exec (@strSql)
    27 
    28 set nocount off;
    分页存储过程

    webApi接口(ADO.NET部分封装了,此处是调用形式)

     1         /// 测试mui下拉刷新
     2         /// </summary>
     3         /// <param name="flag"></param>
     4         /// <returns></returns>
     5         [HttpPost]
     6         public object test(JObject data)
     7         {
     8 
     9             using (var db = new DbBase())
    10             {
    11                 SqlParameter[] arr = { 
    12                                      new SqlParameter{ ParameterName="tab",Value=data["tab"].ToString()},
    13                                      new SqlParameter{ ParameterName="strFld",Value=data["strFld"].ToString()},
    14                                      new SqlParameter{ ParameterName="strWhere",Value=data["strWhere"].ToString()},
    15                                      new SqlParameter{ ParameterName="PageIndex",Value=Convert.ToInt32(data["PageIndex"])},
    16                                      new SqlParameter{ ParameterName="PageSize",Value=Convert.ToInt32(data["PageSize"])},
    17                                      new SqlParameter{ ParameterName="Sort",Value=data["Sort"].ToString()},
    18                                       new SqlParameter{ ParameterName="IsGetCount",Value=Convert.ToInt32(data["IsGetCount"])},
    19                                      };
    20 
    21 
    22             return    RepositoryBase.ExecuteReader(db, "Common_PageList", arr);
    23 
    24 
    25             }
    webApi接口

    页面实现

      1 <!DOCTYPE html>
      2 <html>
      3 
      4     <head>
      5         <meta charset="utf-8">
      6         <title>Hello MUI</title>
      7         <meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no">
      8         <meta name="apple-mobile-web-app-capable" content="yes">
      9         <meta name="apple-mobile-web-app-status-bar-style" content="black">
     10 
     11         <link rel="stylesheet" href="../css/mui.min.css">
     12         <style type="text/css">
     13             
     14             
     15             
     16         </style>
     17     </head>
     18 
     19     <body>
     20         
     21             <header class="mui-bar mui-bar-nav">
     22             <h1 class="mui-title">下拉刷新(单webview模式)</h1>
     23         </header>
     24         
     25         <div id="pullrefresh" class="mui-content mui-scroll-wrapper">
     26             <div class="mui-scroll">
     27                 
     28                     <ul id="container" class="mui-table-view mui-table-view-chevron"></ul>
     29                 
     30             
     31                 
     32             </div>
     33         </div>
     34  
     35      
     36          <ul id="temp" class="mui-table-view" style="display: none;">
     37                  <li class="mui-table-view-cell">
     38                      <a class="mui-navigate-right">
     39                          @name
     40                      </a>
     41                  </li>
     42                 
     43              </ul>
     44         
     45      
     46         
     47         
     48         
     49         <script src="../js/mui.js" type="text/javascript" charset="utf-8"></script>
     50         <script>
     51         
     52         
     53         
     54                 /**
     55                  数据源分页参数对象
     56                  * */
     57                 var obj={ tab:'SystemUsers',
     58                             strFld:'code,Username',
     59                             strWhere:'1=1',
     60                             PageIndex:1,
     61                             PageSize:10,
     62                             Sort:'Username',
     63                             IsGetCount:0,
     64                             pageCount:0
     65                         }
     66                 
     67             //webApi服务器接口    
     68             var apiUrl="http://192.168.200.114:8123/api/Common/Base/test";
     69             
     70             
     71                 /**
     72                  * 定义数据源按什么html方式展示,动态生成html字符串的逻辑
     73                  **/                
     74                 var drawHtml=function(data){
     75                         var html=""
     76                          for (var i=0;i<data.length;i++) 
     77                          {
     78                             var temp=document.getElementById("temp").innerHTML; //模板
     79                             html+=temp.toString().replace('@name',data[i].Username);  //替换参数叠加
     80                         }
     81                          
     82                      return html;
     83                 }
     84             
     85             
     86             
     87             mui.ready(function(){
     88              
     89  
     90              /**
     91                  MUI配置项
     92                  * */        
     93             mui.init({
     94                 pullRefresh: {
     95                     container: '#pullrefresh',
     96                     down: {
     97                         callback: pulldownRefresh
     98                     }, //END 下拉刷新
     99                     up : {    
    100                           contentrefresh : "正在加载...",//可选,正在加载状态时,上拉加载控件上显示的标题内容
    101                           contentnomore:'没有更多数据了',//可选,请求完毕若没有更多数据时显示的提醒内容;
    102                           callback :pullupRefresh //必选,刷新函数,根据具体业务来编写,比如通过ajax从服务器获取新数据;
    103                     } //END 上拉加载
    104                 }
    105             });
    106      
    107          
    108          
    109 
    110                             
    111                 //统计:数据总数、分页总数    
    112                 obj.IsGetCount=1;                     
    113                 loadData(apiUrl,obj,0);
    114              
    115                 //初始化列表数据(第一页)
    116                 obj.IsGetCount=0;        
    117                  loadData(apiUrl,obj,0,"down",function(data){                     
    118                      //此处实现动态绘制DOM的逻辑,根据数据源自行处理要展示的html方式                                          
    119                      return drawHtml(data);
    120                      
    121                  });
    122                 
    123                 
    124             });
    125              
    126         
    127         
    128             
    129             /*
    130              读取数据源
    131              url:api地址
    132              dataObj:数据源分页查询参数对象
    133              Timeout:指定多少时间后绘制页面DOM展示对象,
    134                              动态生成的元素代码包含在一个setTimeout函数里,
    135                              用    setTimeout,主要对于下拉刷新间隔时间
    136              loadType:加载方式:up(上拉加载)、down(上拉刷新)        
    137              drawFunction:回调函数,处理拿到数据源,绘制DOM展示界面的html
    138                                      ,要接收返回的html字符串
    139              * */
    140             
    141             var loadData=function(url,dataObj,Timeout,loadType,drawFunction){
    142                 
    143                 mui.ajax(url, {
    144                                 type: "post",
    145                                 data:dataObj,
    146                                 async:false,
    147                                 headers: {'Content-Type': 'application/json'},
    148                                 success: function(data) {
    149                                        
    150                                     //统计出数据总数
    151                                     if(dataObj.IsGetCount==1)
    152                                     {                                                                        
    153                                         obj.pageCount=Math.ceil(parseInt(data[0].Column1)/obj.PageSize) ;                                     
    154                                          return;
    155                                     }
    156                     
    157                                     setTimeout(function() {            
    158                                                                      
    159                                     //动态绘制出的Dom元素,结合数据展现
    160                                     var html=    drawFunction(data);
    161                                          
    162                                     if(loadType=="up")    //上拉加载
    163                                     {
    164                                                 if(obj.PageIndex==obj.pageCount)
    165                                                 {
    166                                                     //参数为true代表没有更多数据了。
    167                                                     mui('#pullrefresh').pullRefresh().endPullupToRefresh(true);
    168                                                 }
    169                                                 else
    170                                                 {
    171                                                     mui('#pullrefresh').pullRefresh().endPullupToRefresh(); 
    172                                                 }
    173                                             
    174                                         //将下一页数据追加到容器    
    175                                         document.getElementById("container").innerHTML=document.getElementById("container").innerHTML+html;
    176                                     }
    177                                     else if(loadType=="down")  //下拉刷新
    178                                     {
    179                                         // 该方法的作用是关闭“正在刷新”的样式提示,内容区域回滚顶部位置
    180                                         mui('#pullrefresh').pullRefresh().endPulldownToRefresh(); 
    181                                         
    182                                         //将第一页数据覆盖到容器
    183                                         document.getElementById("container").innerHTML=html;
    184                                         
    185                                         //启用上拉加载
    186                                         mui('#pullrefresh').pullRefresh().enablePullupToRefresh();
    187                                          
    188                                     }
    189                                     
    190                                         
    191                                         
    192                                     
    193                                 
    194                                     
    195                                 }, Timeout);//END setTimeout();
    196             
    197                                 },//END success();
    198                                 
    199                                 error: function(xhr, type, errorThrown) {                                 
    200                                             console.log(type);
    201                                 }//END error();
    202                                 
    203                     });//END ajax();
    204                 
    205             }//END loadData();
    206             
    207             
    208             
    209     
    210              
    211      
    212             
    213           /**
    214              * 下拉刷新具体业务实现
    215              */
    216             function pulldownRefresh() {    
    217                     console.log('重置数据,初始到第一页');
    218                     obj.PageIndex=1;
    219     
    220                      loadData(apiUrl,obj,1000,"down",function(data){
    221                      //此处实现动态绘制DOM的逻辑,根据数据源自行处理要展示的html方式                                          
    222                      return drawHtml(data);
    223                          
    224                      });
    225         
    226         } //END pulldownRefresh() 下拉刷新函数
    227             
    228             
    229              
    230             
    231     
    232             /**
    233              * 上拉加载具体业务实现
    234              */
    235             function pullupRefresh() {
    236                 obj.PageIndex++;//当前页累加,加载下一页的数据             
    237                 console.log("加载第:"+obj.PageIndex+"");
    238                 console.log("页总数:"+obj.pageCount);
    239                     
    240              loadData(apiUrl,obj,1000,"up",function(data){
    241                      //此处实现动态绘制DOM的逻辑,根据数据源自行处理要展示的html方式                                          
    242                      return drawHtml(data);
    243                      
    244              });
    245                 
    246 
    247             }
    248             
    249         
    250 
    251         </script>
    252     </body>
    253 
    254 </html>
    页面

    改进的问题当单次数的下拉刷新会自动触发上拉加载。比如:第一次进行下拉,就会自动触发上拉加载,但是第二次就没有。

          

  • 相关阅读:
    基于bootstrap实现收缩导航条
    js判断打开网站页面是PC端还是手机端
    vs2015调试sqlserver 存储过程
    C#计算当前日是第几周
    C#计算一年有多少周
    tcpdump命令的使用
    keepalived配置
    正则匹配中文
    git merge 和 git rebase详解
    systemd和sysv服务管理和配置
  • 原文地址:https://www.cnblogs.com/green-jcx/p/7095177.html
Copyright © 2020-2023  润新知