精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-01-19
主要原理:通过 setInterval 定时事件,检测滚动条的位置,再进行 ajax 请求服务端数据,加载图片到页面上。 现有 淘宝商城,3366等网站都有应用。 主要演示代码如下: <script type="text/javascript"> var iHeight = 0; var iTop = 0; var clientHeight = 0; var iIntervalId = null; var itemsSize = 0; var pageNo = 1; // 当前页数,默认设为第 1 页 var pageSize = 4; // 每页显示的数量 getPageHeight(); // 添加定时检测事件,每2秒检测一次 iIntervalId = setInterval("_onScroll();", 2000); // 取得当前页面显示所占用的高度 function getPageHeight() { if(document.body.clientHeight && document.documentElement.clientHeight) { clientHeight = (document.body.clientHeight < document.documentElement.clientHeight) ? document.body.clientHeight : document.documentElement.clientHeight; } else { clientHeight = (document.body.clientHeight > document.documentElement.clientHeight) ? document.body.clientHeight : document.documentElement.clientHeight; } iHeight = Math.max(document.body.scrollHeight,document.documentElement.scrollHeight); } // 调用ajax取服务端数据 function show() { pageNo++; $.ajax({ url: 'img.php?p='+pageNo+'&r='+Math.random(), type: 'GET', dataType: 'text', timeout: 4000, beforeSend: showLoadingImg, error: showFailure, success: showResponse }); } function showLoadingImg() { $('#showmore').html('<a class="handle" href="javascript:show()"><img src="images_test/loading.gif" height="32px" />显示更多结果</a>'); } function showFailure() { $('#showmore').html('<font color=red> 获取查询数据出错 </font>'); } // 根据ajax取出来的json数据转换成html function showResponse(responseData) { var returnjson = eval("("+responseData+")"); itemsSize = returnjson.items.length; var nextpagehtml = ''; var pageOffset = (pageNo-1)*pageSize + 1; for(i=0; i<itemsSize; i++) { nextpagehtml += '<ul class="item">'; nextpagehtml += '<li class="i_thumb"><a href="http://www.xuekaifa.com" target="_blank" title="'+ returnjson.items[i].name +'"><img src="'+ returnjson.items[i].pic +'" alt="'+ returnjson.items[i].name +'" /></a></li>'; nextpagehtml += '<li class="i_title"><span class="order">'+ (pageOffset + i) +'</span><a href="http://www.xuekaifa.com" target="_blank" title="'+ returnjson.items[i].name +'">'+ returnjson.items[i].name +'</a></li>'; nextpagehtml += '</ul>'; } nextpagehtml += '<div class="clear"></div>'; $('#items').html($('#items').html() + nextpagehtml); // 当前页码数小于3页时继续显示更多提示框 if(pageNo < 3) { $('#showmore').html('<a class="handle" href="javascript:show()">显示更多结果</a>'); } else { clearInterval(iIntervalId); $('#showmore').hide(); } } // 判断滚动条是否到达底部 function reachBottom() { var scrollTop = 0; if(document.documentElement && document.documentElement.scrollTop) { scrollTop = document.documentElement.scrollTop; } else if (document.body) { scrollTop = document.body.scrollTop; } if((scrollTop > 0) && (scrollTop + clientHeight == iHeight)) { return true; } else { return false; } } // 检测事件,检测滚动条是否接近或到达页面的底部区域,0.99是为了更接近底部时 function _onScroll() { iTop = document.documentElement.scrollTop + document.body.scrollTop; getPageHeight(); if(((iTop+clientHeight)>parseInt(iHeight*0.99))||reachBottom()) { if(pageNo >= 3) { clearInterval(iIntervalId); $('#showmore').hide(); return; } show(); } }; </script> 完整源码下载地址:http://www.xuekaifa.com/article/20110119/000414.html 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-01-21
支持下,强,QQ空间里也用到了这个技术
|
|
返回顶楼 | |
发表时间:2011-01-21
直接用body的onscroll事件检测呢?!
|
|
返回顶楼 | |
发表时间:2011-01-21
LZ搞的图片太惹眼了……
|
|
返回顶楼 | |
发表时间:2011-01-21
jquery不是有提供Jquery.LazyLoad.js插件吗?
还有就是用body的onscroll事件监测会比较好。 |
|
返回顶楼 | |
发表时间:2011-01-21
LazyLoad.js完全是假“延迟”!费力不讨好的一个插件
详情:http://hi.baidu.com/qiao/blog/item/d476dab487b644638bd4b21d.html |
|
返回顶楼 | |
发表时间:2011-01-21
如果demo里有这些图片的话我就下载。
|
|
返回顶楼 | |
发表时间:2011-01-21
accphc 写道 直接用body的onscroll事件检测呢?!
那样每滚动一像素就会触发,太频繁,浏览器很累的.......页面元素多了,甚至有顿感... |
|
返回顶楼 | |
发表时间:2011-01-21
还是定时查询比较好,在第二屏显示空白图片,scroll到的时候再去查询真正的图片
|
|
返回顶楼 | |
发表时间:2011-01-21
一直想用这种技术,楼主厉害啊。。
|
|
返回顶楼 | |