pc加載更多功能和移動(dòng)端下拉刷新加載數(shù)據(jù)
感覺(jué)一個(gè)人玩lol也沒(méi)意思了,玩會(huì)手機(jī),看到這個(gè)下拉刷新功能就寫(xiě)了這個(gè)demo!
這個(gè)demo寫(xiě)的比較隨意,咱不能當(dāng)做插件使用,基本思想是沒(méi)問(wèn)題的,要用就自己封裝吧!
直接上代碼分析下吧!
布局:
<ul class="show-area" style="min-height:100px;"></ul> <button class='page-btn-nick' >加載更多</button>
就2行,只為實(shí)現(xiàn)功能,足矣!
js也不復(fù)雜,先定義2個(gè)變量,貫穿整個(gè)demo,進(jìn)了不要全局變量,當(dāng)然,封裝的時(shí)候也可以當(dāng)做閉包參數(shù)!
var m=0,n=2;//m:button點(diǎn)擊次數(shù) n:一次加載幾條數(shù)據(jù)
請(qǐng)求:
$.ajax('paging.html')
這里我就寫(xiě)的本頁(yè)面地址作為測(cè)試url。
下面請(qǐng)求成功后的處理就是重點(diǎn)了:
var obj={developer:[{name:'nick'},{name:'ljy'},{name:'xzl'},{name:'jeson'},{name:'yst'},{name:'zhw'},{name:'wqq'}]} response=obj.developer;//假設(shè)請(qǐng)求到的數(shù)據(jù)是obj m++; var data='',elm=''; if(m>(response.length%n==0?response.length/n:parseInt(response.length/n))){ data=response.slice(n*(m-1)); $('.page-btn-nick').html('沒(méi)有更多了'); $('.page-btn-nick').attr('disabled','disabled'); }else{ data=response.slice(n*(m-1),n*m); }
中心思想:
請(qǐng)求按鈕點(diǎn)擊一次,m+1,講請(qǐng)求的數(shù)據(jù)拆分,只要需要的數(shù)據(jù)data;
data=response.slice(n*(m-1),n*m);
slice(s,e)函數(shù)獲取請(qǐng)求到的數(shù)據(jù)的一部分,s:response的起始位置,e結(jié)尾位置(取不到e位置的元素),返回值是一個(gè)含頭不含尾的數(shù)組。
這里由于開(kāi)始默認(rèn)加載n條數(shù)據(jù),m已經(jīng)加了一次1了,所以要s和e要對(duì)應(yīng)的改變;
將數(shù)據(jù)動(dòng)態(tài)加載到頁(yè)面:
var len=data.length; for(var i= 0;i<len;i++){ elm+="<li>"+data[i].name+"</li>"; } $('.show-area').append(elm);
這里的append()要比html()更優(yōu)!
我看有些developer是勇的html(),這樣每加載一次,頁(yè)面中的所有l(wèi)i將全部清空,在重新加載所有的li,感覺(jué)每次加載都要加載有點(diǎn)多余的數(shù)據(jù),浪費(fèi)啊……
看上面的數(shù)據(jù)就知道,我是講每次請(qǐng)求的數(shù)據(jù)在slice()一次,在添加到頁(yè)面。這要寫(xiě)我每加載一次,只把這次加載的數(shù)據(jù)append到ul的最后,以前的li并不會(huì)清空,這要加載的數(shù)據(jù)就是每次想要多加的必要數(shù)據(jù),沒(méi)有重復(fù)添加,感覺(jué)給力點(diǎn)吧!
后面我把請(qǐng)求數(shù)據(jù)的getData()作為button點(diǎn)擊事件處理函數(shù),同時(shí)放在判斷后的下拉事件中,就可以實(shí)現(xiàn)點(diǎn)擊按鈕動(dòng)態(tài)加載數(shù)據(jù)和下拉刷新加載數(shù)據(jù)了!
最后附上完整代碼:
<!DOCTYPE html> <html> <head> <meta charset='utf-8'> <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport"> <title>paging nick</title> <style> </style> </head> <body> <ul class="show-area" style="min-height:100px;"></ul> <button class='page-btn-nick' >加載更多</button> <script src='http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js'></script> <script> ;(function(){ getData(); var m=0,n=2;//m:button點(diǎn)擊次數(shù) n:一次加載幾條數(shù)據(jù) $('.page-btn-nick').click(getData); function getData(){ $.ajax('paging.html').then(function(response){//測(cè)試url寫(xiě)本頁(yè)面 var obj={developer:[{name:'nick'},{name:'ljy'},{name:'xzl'},{name:'jeson'},{name:'yst'},{name:'zhw'},{name:'wqq'}]} response=obj.developer;//假設(shè)請(qǐng)求到的數(shù)據(jù)是obj m++; var data='',elm=''; if(m>(response.length%n==0?response.length/n:parseInt(response.length/n))){ data=response.slice(n*(m-1)); $('.page-btn-nick').html('沒(méi)有更多了'); $('.page-btn-nick').attr('disabled','disabled'); }else{ data=response.slice(n*(m-1),n*m); } var len=data.length; for(var i= 0;i<len;i++){ elm+="<li>"+data[i].name+"</li>"; } $('.show-area').append(elm); },function(err){ console.log(err); }); } $(".show-area").on("touchstart", function(e) { e.preventDefault(); startX = e.originalEvent.changedTouches[0].pageX, startY = e.originalEvent.changedTouches[0].pageY; }); $(".show-area").on("touchmove", function(e) { e.preventDefault(); moveEndX = e.originalEvent.changedTouches[0].pageX, moveEndY = e.originalEvent.changedTouches[0].pageY, X = moveEndX - startX, Y = moveEndY - startY; if ( Math.abs(X) > Math.abs(Y) && X > 0 ) { alert("left 2 right"); } else if ( Math.abs(X) > Math.abs(Y) && X < 0 ) { alert("right 2 left"); } else if ( Math.abs(Y) > Math.abs(X) && Y > 0) { alert("top 2 bottom"); getData(); } else if ( Math.abs(Y) > Math.abs(X) && Y < 0 ) { alert("bottom 2 top"); } else{ alert("just touch"); } }); }()); </script> </body> </html>
可以直接復(fù)制完整代碼,webstorm打開(kāi)看看看,測(cè)試下吧!
移動(dòng)端下拉事件就一筆帶過(guò)了,可以參考我寫(xiě)的有關(guān)于移動(dòng)化滑動(dòng)事件的文章!
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Listloading.js移動(dòng)端上拉下拉刷新組件
- JS判斷移動(dòng)端訪問(wèn)設(shè)備并加載對(duì)應(yīng)CSS樣式
- js插件dropload上拉下滑加載數(shù)據(jù)實(shí)例解析
- 探索angularjs+requirejs全面實(shí)現(xiàn)按需加載的套路
- js實(shí)現(xiàn)滾動(dòng)條滾動(dòng)到頁(yè)面底部繼續(xù)加載
- js仿手機(jī)頁(yè)面文件下拉刷新效果
- iscroll.js的上拉下拉刷新時(shí)無(wú)法回彈的解決方法
- APP中javascript+css3實(shí)現(xiàn)下拉刷新效果
- 純javascript實(shí)現(xiàn)簡(jiǎn)單下拉刷新功能
- js 控制下拉菜單刷新的方法
相關(guān)文章
使用偽命名空間封裝保護(hù)獨(dú)自創(chuàng)建的對(duì)象方法
下面小編就為大家?guī)?lái)一篇使用偽命名空間封裝保護(hù)獨(dú)自創(chuàng)建的對(duì)象方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-08-08JS實(shí)現(xiàn)移動(dòng)端實(shí)時(shí)監(jiān)聽(tīng)輸入框變化的實(shí)例代碼
這篇文章主要介紹了JS實(shí)現(xiàn)移動(dòng)端實(shí)時(shí)監(jiān)聽(tīng)輸入框變化的解決方案,需要的朋友可以參考下2017-04-04TypeScript對(duì)于Duck類(lèi)型和模塊命名空間應(yīng)用
這篇文章主要介紹了TypeScript對(duì)于Duck類(lèi)型和模塊命名空間應(yīng)用,Duck類(lèi)型是一種動(dòng)態(tài)類(lèi)型和多態(tài)形式,在duck類(lèi)型中,重點(diǎn)是對(duì)象的行為可以做什么,而不是對(duì)象所屬的類(lèi)型2022-08-08JavaScript實(shí)現(xiàn)廣告的關(guān)閉與顯示效果實(shí)例
這篇文章主要介紹了JavaScript實(shí)現(xiàn)廣告的關(guān)閉與顯示效果,涉及javascript廣告窗口的關(guān)閉與顯示效果實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-07-07js下通過(guò)prototype擴(kuò)展實(shí)現(xiàn)indexOf的代碼
這里使用js prototype擴(kuò)展實(shí)現(xiàn)的indexOf的實(shí)現(xiàn)代碼,跟js自帶的方法,差不多。2010-12-12JavaScript 數(shù)組常見(jiàn)操作技巧
這篇文章主要給大家分享的是JavaScript 數(shù)組常見(jiàn)操作技巧,數(shù)組是 JavaScript 中常見(jiàn)數(shù)據(jù)類(lèi)型之一,關(guān)于它的一些操作方法,我在這里做一下簡(jiǎn)單記錄和總結(jié),需要的小伙伴可以參考一下2022-02-02微信小程序點(diǎn)擊頂部導(dǎo)航欄切換樣式代碼實(shí)例
這篇文章主要介紹了微信小程序點(diǎn)擊頂部導(dǎo)航欄切換樣式代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11關(guān)于layui的下拉搜索框異步加載數(shù)據(jù)的解決方法
今天小編就為大家分享一篇關(guān)于layui的下拉搜索框異步加載數(shù)據(jù)的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09