1. 程式人生 > >基於zepto的H5/移動端tab切換觸控拖動載入更多資料

基於zepto的H5/移動端tab切換觸控拖動載入更多資料



以前實現移動端的滑動載入更多實現的方法是當滾動條快到頁面底部時就自動載入更多的資料,在這方面很多人都用的是"西門的後花園"寫的一個叫dropload的外掛,這個外掛用起來也很好,很感謝西門的後花園作者。我以前在專案中用的也是這個外掛,後來我老大說能不能做成那種向上拖動才會載入更多的效果,不要這種滾動到底部就載入,於是我就使用了iscroll。
以下程式碼是加入了從資料庫讀取資料並判斷資料全部載入完成的效果(事實是隻模擬了從資料庫讀取資料,在使用時可將post請求的url和data換成你自己的就可以了),在本頁的最後附上了模擬的程式碼可供下載檢視。

<!DOCTYPE html>
<html
>
<head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <title>基於zepto的移動端/H5觸控拖動載入更多資料</title> <style> *{margin:0;padding:0;outline:0;-webkit-box-sizing:border-box;box-sizing:border-box
;} body{background:#f1f1f1;color:#666;} li{list-style-type:none;} a{text-decoration:none;color:#666;}.tabsNav{overflow:hidden;padding:10px15px;position:fixed;left:0;top:0;width:100%;z-index:2;background:#666;}.tabsNav li{float:left;width:50%;text-align:center;height:30px;line-height:30px;font-size:14px;background
:
#f1f1f1;}.tabsNav li.cur{background:#f00;color:#fff;}.tabs_con{display:none;background:#fff;font-size:12px;}.tabs_con li{height:40px;line-height:40px;border-bottom:1pxsolid#e9e9e9;padding-left:10px;}#wrapper{position:absolute;z-index:1;top:45px;bottom:48px;width:100%;overflow:auto;}#scroller{position:absolute;z-index:1;-webkit-tap-highlight-color:rgba(0,0,0,0);width:100%;}#pullDown, #pullUp{height:40px;line-height:40px;font-size:12px;color:#888;text-align:center;}#pullDown.pullDownIcon, #pullUp.pullUpIcon{position:absolute;margin:8px0030%;width:24px;height:24px;background:url(images/arrow.png)00no-repeat;-webkit-background-size:auto100%;background-size:auto100%;-webkit-transition-property:-webkit-transform;-webkit-transition-duration:250ms;}#pullDown.pullDownIcon{-webkit-transform:rotate(0deg) translateZ(0);}#pullUp.pullUpIcon{-webkit-transform:rotate(-180deg) translateZ(0);}#pullDown.flip.pullDownIcon{-webkit-transform:rotate(-180deg) translateZ(0);}#pullUp.flip.pullUpIcon{-webkit-transform:rotate(0deg) translateZ(0);}#pullDown.loading.pullDownIcon, #pullUp.loading.pullUpIcon{background-image:url(images/loader.png);background-size:100%auto;background-position:0100%;-webkit-transform:rotate(0deg) translateZ(0);-webkit-transition-duration:0ms;-webkit-animation-name:loading;-webkit-animation-duration:2s;-webkit-animation-iteration-count:infinite;-webkit-animation-timing-function:linear;} @-webkit-keyframes loading {from{-webkit-transform:rotate(0deg) translateZ(0);} to{-webkit-transform:rotate(360deg) translateZ(0);} } </style> </head> <body> <ul class="tabsNav"> <li class="cur">公告</li> <li>訊息</li> </ul> <div id="wrapper"> <div id="scroller"> <div class="pullDown" id="pullDown"> <div class="pullDownIcon"></div><div class="pullDownLabel">下拉重新整理</div> </div> <div class="tabs_con" style="display:block;"> <ul></ul> </div> <div class="tabs_con"> <ul></ul> </div> <div class="pullUp" id="pullUp"> <div class="pullUpIcon"></div><div class="pullUpLabel">上拉載入更多</div> </div> </div> </div> <input type="hidden" class="notice_hide"> <input type="hidden" class="msg_hide"> <script src="js/zepto.min.js"></script> <script src="js/iscroll.js"></script> <script>var pageNoticeIndex =1,//當前頁 pageMsgIndex =1, pageSize =5,//每頁數量 load1More =false,//判斷是否全部載入完畢 load2More =false;//tab切換$('.tabsNav li').on('click',function(){var $this =$(this); curIndex =$this.index();$this.addClass('cur').siblings('li').removeClass('cur');$('.tabs_con').eq(curIndex).css("display","block").siblings('.tabs_con').css("display","none");myScroll.scrollTo(0,0);//確保每次切換時scroll回到初始起點myScroll.refresh();//每次切換時都要呼叫介面更新方法if(curIndex ==0){if(!load1More){$("#pullUp").html('<div class="pullUpIcon"></div><div class="pullUpLabel">上拉載入更多</div>');}else{$("#pullUp").html("已無更多資料");}}elseif(curIndex ==1){if(!load2More){$("#pullUp").html('<div class="pullUpIcon"></div><div class="pullUpLabel">上拉載入更多</div>');}else{$("#pullUp").html("已無更多資料");}}});//公告pageNoitce(pageNoticeIndex,0);//初始化載入資料 第一個引數是當前頁,第二個引數是當前選中的tab的索引functionpageNoitce(pageIndex, curIndex) {var html ="";$.post(url, data,function (success) {if (success !=null&&success.status==1) {for (var i =0; i <success.data.length; i++) { html +='<li><a href="#">'+success.data[i].Title+'</a></li>';}var pageCount =parseInt(success.page.totRecord);var page =Math.ceil(pageCount / pageSize);if (page == pageIndex) { load1More =true;}$(".tabs_con").eq(curIndex).children("ul").append(html);}},"json");}//訊息pageMsg(pageMsgIndex,1);functionpageMsg(pageIndex, curIndex) {var html ="";$.post(url, data,function (res) {if (res !=null&&res.status==1) {for (var i =0; i <res.data.length; i++) { html +='<li><a href="#">'+res.data[i].Title+'</i></a></li>';}var pageCount =parseInt(res.page.totRecord);var page =Math.ceil(pageCount / pageSize);if (page == pageIndex) { load2More =true;}$(".tabs_con").eq(curIndex).children("ul").append(html);}},"json");}var myScroll;functionpullDownAction () {setTimeout(function () {myScroll.refresh();},1000);}functionpullUpAction () {setTimeout(function () {var curIndex =$(".cur").index();if(curIndex ==0){if(!load1More){ pageNoticeIndex +=1;$(".notice_hide").val(pageNoticeIndex);pageNoitce($(".notice_hide").val(), curIndex);}else{$("#pullUp").html("已無更多資料");}}elseif(curIndex ==1){if(!load2More){ pageMsgIndex +=<