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

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

编写存储过程分页

(此处使用T-SQL)

print @strSql
exec (@strSql)

set nocount off;

webApi接口

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

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


  }

页面实现

Hello MUI <link rel="stylesheet" href="../css/mui.min.css" rel="external nofollow" > <style type="text/css"&gt; </style>
  <header class="mui-bar mui-bar-nav"&gt;
  <h1 class="mui-title"&gt;下拉刷新(单webview模式)</h1>
</header>

<div id="pullrefresh" class="mui-content mui-scroll-wrapper"&gt;
  <div class="mui-scroll"&gt;

      <ul id="container" class="mui-table-view mui-table-view-chevron"&gt;</ul>

  </div>
</div>
 <ul id="temp" class="mui-table-view" style="display: none;"&gt;
     <li class="mui-table-view-cell"&gt;
       <a class="mui-navigate-right"&gt;
         @name
       </a>
     </li>

   </ul>

<script src="../js/mui.js" type="text/javascript" charset="utf-8"&gt;</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,"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,1000,function(data){
       //此处实现动态绘制DOM的逻辑,根据数据源自行处理要展示的html方式                     
       return drawHtml(data);

       });

} //END pulldownRefresh() 下拉刷新函数


  /**
   * 上拉加载具体业务实现
   */
  function pullupRefresh() {
    obj.PageIndex++;//当前页累加,加载下一页的数据       
    console.log("加载第:"+obj.PageIndex+"页");
    console.log("页总数:"+obj.pageCount);

   loadData(apiUrl,"up",function(data){
       //此处实现动态绘制DOM的逻辑,根据数据源自行处理要展示的html方式                     
       return drawHtml(data);

   });


  }



</script>

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

相关文章

kindeditor4.x代码高亮功能默认使用的是prettify插件,prett...
这一篇我将介绍如何让kindeditor4.x整合SyntaxHighlighter代...
js如何实现弹出form提交表单?(图文+视频)
js怎么获取复选框选中的值
js如何实现倒计时跳转页面
如何用js控制图片放大缩小