欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MUI实现上拉加载和下拉刷新效果

程序员文章站 2023-09-08 22:10:44
本文实例为大家分享了mui实现上拉加载和下拉刷新展示的具体代码,供大家参考,具体内容如下 编写存储过程分页(此处使用t-sql) create proc [db...

本文实例为大家分享了mui实现上拉加载和下拉刷新展示的具体代码,供大家参考,具体内容如下

编写存储过程分页(此处使用t-sql)

create proc [dbo].[common_pagelist]
(
@tab nvarchar(max),---表名
@strfld nvarchar(max), --字段字符串
@strwhere varchar(max), --where条件 
@pageindex int, --页码
@pagesize int, --每页容纳的记录数
@sort varchar(255), --排序字段及规则,不用加order by
@isgetcount bit --是否得到记录总数,1为得到记录总数,0为不得到记录总数,返回记录集
)
as
declare @strsql nvarchar(max)
set nocount on;
if(@isgetcount = 1)
begin
 set @strsql='select count(0) from ' + @tab + ' where ' + @strwhere
end
else
begin
 set @strsql=' select * from (select row_number() 
 over(order by ' + @sort + ') as rownum, ' + @strfld + ' from ' + @tab + ' where ' + @strwhere + ') as dwhere
 where rownum between ' + cast(((@pageindex-1)*@pagesize + 1) as nvarchar(20)) + ' and ' + cast((@pageindex*@pagesize) as nvarchar(20))
end

print @strsql
exec (@strsql)

set nocount off;

webapi接口(ado.net部分封装了,此处是调用形式)

/// 测试mui下拉刷新
    /// </summary>
    /// <param name="flag"></param>
    /// <returns></returns>
    [httppost]
    public object test(jobject data)
    {

      using (var db = new dbbase())
      {
        sqlparameter[] arr = { 
                   new sqlparameter{ parametername="tab",value=data["tab"].tostring()},
                   new sqlparameter{ parametername="strfld",value=data["strfld"].tostring()},
                   new sqlparameter{ parametername="strwhere",value=data["strwhere"].tostring()},
                   new sqlparameter{ parametername="pageindex",value=convert.toint32(data["pageindex"])},
                   new sqlparameter{ parametername="pagesize",value=convert.toint32(data["pagesize"])},
                   new sqlparameter{ parametername="sort",value=data["sort"].tostring()},
                   new sqlparameter{ parametername="isgetcount",value=convert.toint32(data["isgetcount"])},
                   };


      return  repositorybase.executereader(db, "common_pagelist", arr);


      }

页面实现

<!doctype html>
<html>

  <head>
    <meta charset="utf-8">
    <title>hello mui</title>
    <meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">

    <link rel="stylesheet" href="../css/mui.min.css" rel="external nofollow" >
    <style type="text/css">
      
       
    </style>
  </head>
  <body>
    
      <header class="mui-bar mui-bar-nav">
      <h1 class="mui-title">下拉刷新(单webview模式)</h1>
    </header>
    
    <div id="pullrefresh" class="mui-content mui-scroll-wrapper">
      <div class="mui-scroll">
        
          <ul id="container" class="mui-table-view mui-table-view-chevron"></ul>
      
      </div>
    </div>
     <ul id="temp" class="mui-table-view" style="display: none;">
         <li class="mui-table-view-cell">
           <a class="mui-navigate-right">
             @name
           </a>
         </li>
        
       </ul>
    
    <script src="../js/mui.js" type="text/javascript" charset="utf-8"></script>
    <script>
  
        /**
         数据源分页参数对象
         * */
        var obj={ tab:'systemusers',
              strfld:'code,username',
              strwhere:'1=1',
              pageindex:1,
              pagesize:10,
              sort:'username',
              isgetcount:0,
              pagecount:0
            }
        
      //webapi服务器接口  
      var apiurl="http://192.168.200.114:8123/api/common/base/test";
      
      
        /**
         * 定义数据源按什么html方式展示,动态生成html字符串的逻辑
         **/        
        var drawhtml=function(data){
            var html=""
             for (var i=0;i<data.length;i++) 
             {
              var temp=document.getelementbyid("temp").innerhtml; //模板
              html+=temp.tostring().replace('@name',data[i].username); //替换参数叠加
            }
             
           return html;
        }
    
      mui.ready(function(){
       /**
         mui配置项
         * */    
      mui.init({
        pullrefresh: {
          container: '#pullrefresh',
          down: {
            callback: pulldownrefresh
          }, //end 下拉刷新
          up : {  
             contentrefresh : "正在加载...",//可选,正在加载状态时,上拉加载控件上显示的标题内容
             contentnomore:'没有更多数据了',//可选,请求完毕若没有更多数据时显示的提醒内容;
             callback :pulluprefresh //必选,刷新函数,根据具体业务来编写,比如通过ajax从服务器获取新数据;
          } //end 上拉加载
        }
      });
             
        //统计:数据总数、分页总数  
        obj.isgetcount=1;           
        loaddata(apiurl,obj,0);
       
        //初始化列表数据(第一页)
        obj.isgetcount=0;    
         loaddata(apiurl,obj,0,"down",function(data){           
           //此处实现动态绘制dom的逻辑,根据数据源自行处理要展示的html方式                     
           return drawhtml(data);
           
         });
        
        
      });
             
      /*
       读取数据源
       url:api地址
       dataobj:数据源分页查询参数对象
       timeout:指定多少时间后绘制页面dom展示对象,
               动态生成的元素代码包含在一个settimeout函数里,
               用  settimeout,主要对于下拉刷新间隔时间
       loadtype:加载方式:up(上拉加载)、down(上拉刷新)    
       drawfunction:回调函数,处理拿到数据源,绘制dom展示界面的html
                   ,要接收返回的html字符串
       * */
      
      var loaddata=function(url,dataobj,timeout,loadtype,drawfunction){
        
        mui.ajax(url, {
                type: "post",
                data:dataobj,
                async:false,
                headers: {'content-type': 'application/json'},
                success: function(data) {
                    
                  //统计出数据总数
                  if(dataobj.isgetcount==1)
                  {                                    
                    obj.pagecount=math.ceil(parseint(data[0].column1)/obj.pagesize) ;                   
                     return;
                  }
          
                  settimeout(function() {      
                                   
                  //动态绘制出的dom元素,结合数据展现
                  var html=  drawfunction(data);
                     
                  if(loadtype=="up")  //上拉加载
                  {
                        if(obj.pageindex==obj.pagecount)
                        {
                          //参数为true代表没有更多数据了。
                          mui('#pullrefresh').pullrefresh().endpulluptorefresh(true);
                        }
                        else
                        {
                          mui('#pullrefresh').pullrefresh().endpulluptorefresh(); 
                        }
                      
                    //将下一页数据追加到容器  
                    document.getelementbyid("container").innerhtml=document.getelementbyid("container").innerhtml+html;
                  }
                  else if(loadtype=="down") //下拉刷新
                  {
                    // 该方法的作用是关闭“正在刷新”的样式提示,内容区域回滚顶部位置
                    mui('#pullrefresh').pullrefresh().endpulldowntorefresh(); 
                    
                    //将第一页数据覆盖到容器
                    document.getelementbyid("container").innerhtml=html;
                    
                    //启用上拉加载
                    mui('#pullrefresh').pullrefresh().enablepulluptorefresh();
                     
                  } 
                  
                }, timeout);//end settimeout();
      
                },//end success();
                
                error: function(xhr, type, errorthrown) {                 
                      console.log(type);
                }//end error();
                
          });//end ajax();
        
      }//end loaddata();
            
     /**
       * 下拉刷新具体业务实现
       */
      function pulldownrefresh() {  
          console.log('重置数据,初始到第一页');
          obj.pageindex=1;
  
           loaddata(apiurl,obj,1000,"down",function(data){
           //此处实现动态绘制dom的逻辑,根据数据源自行处理要展示的html方式                     
           return drawhtml(data);
             
           });
    
    } //end pulldownrefresh() 下拉刷新函数
        
  
      /**
       * 上拉加载具体业务实现
       */
      function pulluprefresh() {
        obj.pageindex++;//当前页累加,加载下一页的数据       
        console.log("加载第:"+obj.pageindex+"页");
        console.log("页总数:"+obj.pagecount);
          
       loaddata(apiurl,obj,1000,"up",function(data){
           //此处实现动态绘制dom的逻辑,根据数据源自行处理要展示的html方式                     
           return drawhtml(data);
           
       });
        

      }
      
    

    </script>
  </body>

</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。