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


Posted in Javascript onJune 30, 2017

本文实例为大家分享了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>

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

Javascript 相关文章推荐
张孝祥JavaScript学习阶段性总结(2)--(X)HTML学习
Feb 03 Javascript
新浪刚打开页面出来的全屏广告代码
Apr 02 Javascript
js hover 定时器(实例代码)
Nov 12 Javascript
Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式
Jun 24 Javascript
JavaScript 实现完美兼容多浏览器的复制功能代码
Apr 28 Javascript
javascript作用域问题实例分析
Jul 13 Javascript
微信小程序 UI与容器组件总结
Feb 21 Javascript
详解vue+vueRouter+webpack的简单实例
Jun 17 Javascript
基于node.js的fs核心模块读写文件操作(实例讲解)
Sep 10 Javascript
jQuery+koa2实现简单的Ajax请求的示例
Mar 06 jQuery
详解jQuery获取特殊属性的值以及设置内容
Nov 14 jQuery
详解js根据百度地图提供经纬度计算两点距离
May 13 Javascript
js实现京东轮播图效果
Jun 30 #Javascript
jquery实现一个全局计时器(商城可用)
Jun 30 #jQuery
Vue和Bootstrap的整合思路详解
Jun 30 #Javascript
JavaScript原型继承_动力节点Java学院整理
Jun 30 #Javascript
JavaScript之排序函数_动力节点Java学院整理
Jun 30 #Javascript
JavaScript操作文件_动力节点Java学院整理
Jun 30 #Javascript
JavaScript之生成器_动力节点Java学院整理
Jun 30 #Javascript
You might like
php从完整文件路径中分离文件目录和文件名的方法
2015/03/13 PHP
PHP也能干大事之PHP中的编码解码详解
2015/04/20 PHP
php提取身份证号码中的生日日期以及验证是否为成年人的函数
2015/09/29 PHP
php 静态属性和静态方法区别详解
2017/04/09 PHP
EasyUi tabs的高度与宽度根据IE窗口的变化自适应代码
2010/10/26 Javascript
JS 仿腾讯发表微博的效果代码
2013/12/25 Javascript
jQuery基础的工厂函数以及定时器的经典实例分析
2016/05/20 Javascript
Vue.js一个文件对应一个组件实践
2016/10/27 Javascript
AngularJS实现用户登录状态判断的方法(Model添加拦截过滤器,路由增加限制)
2016/12/12 Javascript
微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决
2016/12/14 Javascript
JS弹性运动实现方法分析
2016/12/15 Javascript
bootstrap weebox 支持ajax的模态弹出框
2017/02/23 Javascript
Javascript操作dom对象之select全面解析
2017/04/24 Javascript
vue+iview写个弹框的示例代码
2017/12/05 Javascript
JavaScript事件对象深入详解
2018/12/30 Javascript
使用JavaScript解析URL的方法示例
2019/03/01 Javascript
[01:04:29]DOTA2-DPC中国联赛 正赛 Phoenix vs XG BO3 第二场 1月31日
2021/03/11 DOTA
Python写的一个简单监控系统
2015/06/19 Python
使用Python写CUDA程序的方法
2017/03/27 Python
Python实现TCP探测目标服务路由轨迹的原理与方法详解
2019/09/04 Python
python实现七段数码管和倒计时效果
2019/11/23 Python
linux 下python多线程递归复制文件夹及文件夹中的文件
2020/01/02 Python
Python中的X[:,0]、X[:,1]、X[:,:,0]、X[:,:,1]、X[:,m:n]和X[:,:,m:n]
2020/02/13 Python
打印tensorflow恢复模型中所有变量与操作节点方式
2020/05/26 Python
解决python便携版无法直接运行py文件的问题
2020/09/01 Python
UGG澳洲官网:UGG Australia
2018/04/26 全球购物
时尚、社区、科技:SEVENSTORE
2019/04/26 全球购物
英国第一的滑雪服装和装备零售商:Snow+Rock
2020/02/01 全球购物
大学毕业生通用自荐信范文
2013/10/31 职场文书
知名企业招聘广告词大全
2014/03/18 职场文书
个人股份转让协议书范本
2014/10/26 职场文书
国庆节慰问信
2015/02/15 职场文书
党员身份证明材料
2015/06/19 职场文书
Django 如何实现文件上传下载
2021/04/08 Python
Python制作一个随机抽奖小工具的实现
2021/07/07 Python
Vue+Flask实现图片传输功能
2022/04/01 Vue.js