微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Ajax动态滚动加载数据第一版

看新浪微博,人人网都有这样的效果:滚动条滚动到最下面的时候,新的数据就被自动加载出来了,今天亲自尝试了一下这个效果的实现。

核心代码更新

[javascript] view plain copy
  1. $(window).scroll(function(){
  2. //当滚动到最底部以上n像素时,加载新内容
  3. if($(document).height()-$(this).scrollTop()-$(this).height()<1){
  4. getData(gCurrentPage,gLongitude,gLatitude);
  5. }
  6. });



首先,准备一个分页的存储过程:

[sql] copy
    CREATEPROCEDUREproctest
  1. @pagesizeINT,
  2. @pagenumberINT
  3. AS
  4. SELECT*
  5. FROM(SELECTROW_NUMBER()OVER(ORDERBYuserid)ASROWNUM,c_name,user_emailFROMehrusersWHEREc_name<>''
  6. )ASproducts
  7. WHEREROWNUMBETWEEN@pagesize*(@pagenumber-1)+1and@pagesize*@pagenumber
  8. EXECdbo.proctest20,1

接着,写一个取数据的C#方法

[csharp] copy
    //Test
  1. publicstaticDataTableGetTable(intpagesize,intpagenum)
  2. {
  3. stringsql=string.Format(@"EXECdbo.proctest{0},{1}",pagesize,pagenum);
  4. DataSetds=sqlHelper.ExecuteDataset(ConnString.GetConString,CommandType.Text,sql);
  5. if(ds.Tables.Count>0&&ds.Tables[0].Rows.Count>0)
  6. returnds.Tables[0];
  7. else
  8. returnnull;
  9. }

Ajax请求数据的逻辑,调用刚才的方法,返回JSON:

copy

    protectedvoidPage_Load(objectsender,EventArgse)
  1. {
  2. if(Request.QueryString["pagesize"]!=null&&Request.QueryString["pagenumber"]!=null)
  3. intpagesize=int.Parse(Request.QueryString["pagesize"].ToString());
  4. intpagenumber=int.Parse(Request.QueryString["pagenumber"].ToString());
  5. System.Data.DataTabledt=DB.GetTable(pagesize,pagenumber);
  6. stringjson=Tools.CreateJsonParameters(dt);
  7. Response.Write(json);
  8. }
  9. 其中用到了一个aspx页面作为controller。

    接下来,就是比较重要的页面和js代码了:

    页面

    [html] copy
    <!DOCTYPEhtml>
  1. <htmlxmlns="http://www.w3.org/1999/xhtml">
  2. headMetahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
  3. title>滚动测试</style .mainDiv{
  4. width:800px;
  5. border:solid1px#f00;
  6. padding:10px;
  7. .item{
  8. width:600px;
  9. height:50px;
  10. border:solid1px#00ff90;
  11. font-size:12px;
  12. margin:10px;
  13. .title{
  14. font-size:16px;
  15. line-height:20px;
  16. .content{
  17. line-height:14px;
  18. scriptsrc="Scripts/jquery-1.7.1.js">scriptbodyh1divclass="mainDiv" <!--divclass="item"divclass="title">titledivdivclass="content">contentcontentcontentcontentcontentcontentcontent --html>

JS:

copy

    <scripttype="text/javascript">
  1. vargPageSize=10;
  2. vari=1;//设置当前页数,全局变量
  3. $(function(){
  4. //根据页数读取数据
  5. functiongetData(pagenumber){
  6. i++;//页码自动增加,保证下次调用时为新的一页。
  7. $.get("Ajax.aspx",{pagesize:gPageSize,pagenumber:pagenumber},153); font-weight:bold; background-color:inherit">function(data){
  8. if(data.length>0){
  9. varjsonObj=JSON.parse(data);
  10. insertDiv(jsonObj.Head);
  11. });
  12. //初始化加载第一页数据
  13. getData(1);
  14. //生成数据html,append到div中
  15. functioninsertDiv(json){
  16. var$mainDiv=$(".mainDiv");
  17. varhtml='';
  18. for(vari=0;i<json.length;i++){
  19. html+='<divclass="item">';
  20. html+='<divclass="title">'+json[i].ROWNUM+''+json[i].c_name+'</div>';
  21. html+='<divclass="content">'+json[i].user_email+'</div>';
  22. html+='</div>';
  23. $mainDiv.append(html);
  24. //==============核心代码=============
  25. varwinH=$(window).height();//页面可视区域高度
  26. //定义鼠标滚动事件
  27. $(window).scroll(varpageH=$(document.body).height();
  28. varscrollT=$(window).scrollTop();//滚动条top
  29. varaa=(pageH-winH-scrollT)/winH;
  30. if(aa<0.02){//0.02是个参数
  31. getData(i);
  32. //==============核心代码=============
  33. </script>

最终效果

滚动前:

滚动自动刷新:

后来又对这一版本进行了一些改进,详见:

http://www.cnblogs.com/dannywang/p/3337473.html

原文地址:https://www.jb51.cc/ajax/163470.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐