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>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: Vuex利用state保存新闻数据实例
下一篇: 详解webpack分包及异步加载套路