看新浪微博,人人网都有这样的效果:滚动条滚动到最下面的时候,新的数据就被自动加载出来了,今天亲自尝试了一下这个效果的实现。
核心代码更新:
- $(window).scroll(function(){
-
- if($(document).height()-$(this).scrollTop()-$(this).height()<1){
- getData(gCurrentPage,gLongitude,gLatitude);
- }
- });
首先,准备一个分页的存储过程:
CREATEPROCEDUREproctest
- @pagesizeINT,
- @pagenumberINT
- AS
-
- SELECT*
- FROM(SELECTROW_NUMBER()OVER(ORDERBYuserid)ASROWNUM,c_name,user_emailFROMehrusersWHEREc_name<>''
- )ASproducts
- WHEREROWNUMBETWEEN@pagesize*(@pagenumber-1)+1and@pagesize*@pagenumber
-
- EXECdbo.proctest20,1
接着,写一个取数据的C#方法:
- publicstaticDataTableGetTable(intpagesize,intpagenum)
- {
- stringsql=string.Format(@"EXECdbo.proctest{0},{1}",pagesize,pagenum);
- DataSetds=SqlHelper.ExecuteDataset(ConnString.GetConString,CommandType.Text,sql);
- if(ds.Tables.Count>0&&ds.Tables[0].Rows.Count>0)
- returnds.Tables[0];
- else
- returnnull;
- }
Ajax请求数据的逻辑,调用刚才的方法,返回JSON:
copy
protectedvoidPage_Load(objectsender,EventArgse)
- {
- if(Request.QueryString["pagesize"]!=null&&Request.QueryString["pagenumber"]!=null)
- intpagesize=int.Parse(Request.QueryString["pagesize"].ToString());
- intpagenumber=int.Parse(Request.QueryString["pagenumber"].ToString());
- System.Data.DataTabledt=DB.GetTable(pagesize,pagenumber);
- stringjson=Tools.CreateJsonParameters(dt);
- Response.Write(json);
- }
- 其中用到了一个aspx页面作为controller。
接下来,就是比较重要的页面和js代码了:
页面:
<!DOCTYPEhtml>
- <htmlxmlns="http://www.w3.org/1999/xhtml">
- headmetahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
- title>滚动测试</style .mainDiv{
- width:800px;
- border:solid1px#f00;
- padding:10px;
- .item{
- width:600px;
- height:50px;
- border:solid1px#00ff90;
- font-size:12px;
- margin:10px;
- .title{
- font-size:16px;
- line-height:20px;
- .content{
- line-height:14px;
- scriptsrc="Scripts/jquery-1.7.1.js">scriptbodyh1divclass="mainDiv" <!--divclass="item"divclass="title">titledivdivclass="content">contentcontentcontentcontentcontentcontentcontent --html>
JS:
copy
<scripttype="text/javascript">
- vargPageSize=10;
- vari=1;
- $(function(){
- //根据页数读取数据
- functiongetData(pagenumber){
- i++;
- $.get("Ajax.aspx",{pagesize:gPageSize,pagenumber:pagenumber},153); font-weight:bold; background-color:inherit">function(data){
- if(data.length>0){
- varjsonObj=JSON.parse(data);
- insertDiv(jsonObj.Head);
- });
- //初始化加载第一页数据
- getData(1);
- //生成数据html,append到div中
- functioninsertDiv(json){
- var$mainDiv=$(".mainDiv");
- varhtml='';
- for(vari=0;i<json.length;i++){
- html+='<divclass="item">';
- html+='<divclass="title">'+json[i].ROWNUM+''+json[i].c_name+'</div>';
- html+='<divclass="content">'+json[i].user_email+'</div>';
- html+='</div>';
- $mainDiv.append(html);
- //==============核心代码=============
- varwinH=$(window).height();
- //定义鼠标滚动事件
- $(window).scroll(varpageH=$(document.body).height();
- varscrollT=$(window).scrollTop();
- varaa=(pageH-winH-scrollT)/winH;
- if(aa<0.02){
- getData(i);
- //==============核心代码=============
- </script>
最终效果:
滚动前:
滚动自动刷新:
后来又对这一版本进行了一些改进,详见:
http://www.cnblogs.com/dannywang/p/3337473.html (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|