日期:2014-05-16 浏览次数:20515 次
?? ?之前Google的图片搜索结果界面提供了一个功能,即滚动条滚动到接近底部的位置自动加载剩余图片。个人觉得这个功能还蛮人性化的,避免来回翻页的繁琐,让搜索结果以增量形式展现。所以也自己仿造了一个。功能是基于JQuery的。下面是代码。
?
$(window).scroll(function() { var o = $('#pincontainer'); // 并不是所有页面都要执行加载操作。 // 你也可以选择别的识别条件。 if(o!=null && o.length !=0){ //获取网页的完整高度(fix) var hght= window.scrollHeight; //获取浏览器高度(fix) var clientHeight =window.clientHeight; //??获取网页滚过的高度(dynamic) var top= window.pageYOffset || (document.compatMode == 'CSS1Compat' ? document.documentElement.scrollTop : document.body.scrollTop); //当 top+clientHeight = scrollHeight的时候就说明到底儿了 if(top>=(parseInt(hght)-clientHeight)){ show(); } } }); //我所要执行的操作是把ajax取得的数据塞到目标div中 function show(){ var target = $('#pincontainer'); if(!target){return false;} //一般你都要记录一下你的数据的录入状态,比如到当前显示页码 var current_page = parseInt(target.attr('index')); //还要记录一个最大显示页码,以阻止请求溢出 var max_page = parseInt(target.attr('maxPages')); if(current_page >= max_page){ return false; } var data={}; data.nextPage = parseInt(current_page)+1; var currentHref = window.location; // 有的时候可能还要从url中读取参数,我使用正则式 var tcaStr = new RegExp("(^|)tca=([^\&]*)(\&|$)","gi").exec(currentHref); if(tcaStr) data.tca = tcaStr[2]; var scaStr = new RegExp("(^|)sca=([^\&]*)(\&|$)","gi").exec(currentHref); if(scaStr) data.sca = scaStr[2]; var tagStr = new RegExp("(^|)tag=([^\&]*)(\&|$)","gi").exec(currentHref); if(tagStr) data.tag = tagStr[2]; // ajax请求数据 jQuery.ajax({ type:"POST", url: "/show/getPins/", data:data, dataType: "json", beforeSend: function(XMLHttpRequest){ $("#loading").css('display',''); }, success:function(response) { if(response.data){ for(var i=0, length = response.data.length; i<length; i++){ var html = response.data[i]; var test = $(html); target.append(test); var img = test.find('img'); X.util.flowPin(img[0],188); } target.attr('index',parseInt(current_page)+1); $("#loading").css('display','none'); } }, error:function(){ alert("加载失败??"); } }); return false; }
?
?? ?这个功能的一个关键成败点是scrollTop的计算。刚开始我只使用了document.body.scrollTop,但是这个数值在chrome中一直显示0,于是有了上面的多浏览器兼容计算方法。
?
//??获取网页滚过的高度(dynamic) var top= window.pageYOffset || (document.compatMode == 'CSS1Compat' ? document.documentElement.scrollTop : document.body.scrollTop);
?
?? 改进:考虑到有些用户并不喜欢自动加载的功能,可以在页面上添加“取消自动加载”的按钮,换以按钮控制。