pc加載更多功能和移動端下拉刷新加載數(shù)據(jù)
感覺一個人玩lol也沒意思了,玩會手機,看到這個下拉刷新功能就寫了這個demo!
這個demo寫的比較隨意,咱不能當做插件使用,基本思想是沒問題的,要用就自己封裝吧!
直接上代碼分析下吧!
布局:
<ul class="show-area" style="min-height:100px;"></ul> <button class='page-btn-nick' >加載更多</button>
就2行,只為實現(xiàn)功能,足矣!
js也不復雜,先定義2個變量,貫穿整個demo,進了不要全局變量,當然,封裝的時候也可以當做閉包參數(shù)!
var m=0,n=2;//m:button點擊次數(shù) n:一次加載幾條數(shù)據(jù)
請求:
$.ajax('paging.html')
這里我就寫的本頁面地址作為測試url。
下面請求成功后的處理就是重點了:
var obj={developer:[{name:'nick'},{name:'ljy'},{name:'xzl'},{name:'jeson'},{name:'yst'},{name:'zhw'},{name:'wqq'}]}
response=obj.developer;//假設(shè)請求到的數(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('沒有更多了');
$('.page-btn-nick').attr('disabled','disabled');
}else{
data=response.slice(n*(m-1),n*m);
}
中心思想:
請求按鈕點擊一次,m+1,講請求的數(shù)據(jù)拆分,只要需要的數(shù)據(jù)data;
data=response.slice(n*(m-1),n*m);
slice(s,e)函數(shù)獲取請求到的數(shù)據(jù)的一部分,s:response的起始位置,e結(jié)尾位置(取不到e位置的元素),返回值是一個含頭不含尾的數(shù)組。
這里由于開始默認加載n條數(shù)據(jù),m已經(jīng)加了一次1了,所以要s和e要對應(yīng)的改變;
將數(shù)據(jù)動態(tài)加載到頁面:
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(),這樣每加載一次,頁面中的所有l(wèi)i將全部清空,在重新加載所有的li,感覺每次加載都要加載有點多余的數(shù)據(jù),浪費啊……
看上面的數(shù)據(jù)就知道,我是講每次請求的數(shù)據(jù)在slice()一次,在添加到頁面。這要寫我每加載一次,只把這次加載的數(shù)據(jù)append到ul的最后,以前的li并不會清空,這要加載的數(shù)據(jù)就是每次想要多加的必要數(shù)據(jù),沒有重復添加,感覺給力點吧!
后面我把請求數(shù)據(jù)的getData()作為button點擊事件處理函數(shù),同時放在判斷后的下拉事件中,就可以實現(xiàn)點擊按鈕動態(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點擊次數(shù) n:一次加載幾條數(shù)據(jù)
$('.page-btn-nick').click(getData);
function getData(){
$.ajax('paging.html').then(function(response){//測試url寫本頁面
var obj={developer:[{name:'nick'},{name:'ljy'},{name:'xzl'},{name:'jeson'},{name:'yst'},{name:'zhw'},{name:'wqq'}]}
response=obj.developer;//假設(shè)請求到的數(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('沒有更多了');
$('.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>
可以直接復制完整代碼,webstorm打開看看看,測試下吧!
移動端下拉事件就一筆帶過了,可以參考我寫的有關(guān)于移動化滑動事件的文章!
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JavaScript中小數(shù)點精度丟失的原因以及解決方法
計算機再大的內(nèi)存它也存不下,所以不能存儲一個相對于數(shù)學來說的值,只能存儲一個近似值,所以當計算機存儲后再取出來用時就會出現(xiàn)精度問題,下面這篇文章主要給大家介紹了關(guān)于JavaScript中小數(shù)點精度丟失的原因以及解決方法,需要的朋友可以參考下2023-10-10
JS如何獲取指定范圍內(nèi)的隨機數(shù)含小數(shù)
這篇文章主要介紹了JS如何獲取指定范圍內(nèi)的隨機數(shù)含小數(shù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12
基于javascript實現(xiàn)漂亮的頁面過渡動畫效果附源碼下載
本文通過javascript實現(xiàn)漂亮的頁面過濾動畫效果,用戶通過點擊頁面左側(cè)的菜單,對應(yīng)的頁面加載時伴隨著滑動過濾動畫,并帶有進度條效果。用戶體驗度非常好,感興趣的朋友一起看看吧2015-10-10
排序算法的javascript實現(xiàn)與講解(99js手記)
這篇文章主要介紹了排序算法的javascript實現(xiàn)與講解,需要的朋友可以參考下2014-09-09

