[Jquery] Infinite scroll to load more

在上一篇:[Jquery] use $getJSON
教大家如何撈取json的內容後

這一篇就是延伸上次,做進階練習
首先我們創造一個api.json檔,或者api.js
我試過兩種檔名格式都沒有問題,可以串接無礙

假設我們先創造了api.json檔

key =>"html"
value => "<p style='color:#fff'>我是白色</p>"

api.json
1
{"html": "<p style='color:#fff'>我是白色</p>"}

這邊提醒,由於外面是雙引號(”),所以裡面要用單引號來做區隔(’)

再來我就以jq方式去建構function

首先:我們要監聽window滾輪事件,並將他觸發(trigger)一個fn

main.js
1
window.on('scroll', window_scroll_handler);

第二步驟:我們要開始針對這個scroll做一個判斷
當滑到整個螢幕大約多少位置(範例以94%),即觸發fn 去撈資料$getJSON

main.js
1
2
3
4
5
6
7
function window_scroll_handler() {
var scrollPercent = window.scrollTop() / (document.height() - window.height());
var scrollPercentRounded = (scrollPercent * 100);
if (scrollPercentRounded > 94) {
load_more();
}
}

第三步驟:現在已經來到觸發了load_more(),我們的重頭戲
首先我們要判斷是否已經載入,免得,資料太龐大還在載入
而使用者,卻想說怎麼沒吃料,而反覆撈取資料,導致載入卡卡
所以我們要做把關的變數
再來我們要承接上次的$getJSON

main.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var isloading  = false;
var nextpage = 1;
function load_more() {
if ( isloading === false) {
// var url = "api.php?type=loadmore&page=" + this.nextpage;
//這邊url,我們拿來測試到時要接正式的資料
var url = "api.json";
isloading = true;
$.getJSON("api.json",function(data) {
if (data.html !== null && data.html.length > 0) {
//這邊就是將資料撈取後放到哪個div 之下??
$('body').append(data.html);
//針對每次scroll 會新增一個參數,讓頁面一直往下載入正確的內容
nextpage++;
}
this.isloading = false;
}).fail(function( jqxhr, textStatus, error ) {
var err = textStatus + ", " + error;
console.log( "Request Failed: " + err );
//可以console出錯誤的訊息,避免做通靈王子
});
}
}

好的以上三步驟
就可以完整的測試撈取api.json的value內容囉!

大家可以試看看,滿有趣的

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×