- 作(zuò)者:admin
- 發表時(shí)間(jiān):2013-07-02 14:17:12
- 來(lái)源:未知
我們在一些(xiē)微博網站(zhàn)上(shàng)可(kě)以碰到這樣的應用,微博內(nèi)容列表沒有(yǒu)使用分頁條,而是一次加載一定數(shù)量的記錄顯示在列表頁,當用戶浏覽到列表頁底部時(shí),可(kě)以通(tōng)過單擊“查看更多(duō)”來(lái)加載更多(duō)記錄。本文我将結合jQuery和(hé)PHP給大(dà)家(jiā)講述如何實現這種應用。
基本原理(lǐ):頁面載入時(shí),jQuery向後台請(qǐng)求數(shù)據,PHP通(tōng)過查詢數(shù)據庫将最新的幾條記錄顯示在列表頁,在列表頁的底部有(yǒu)個(gè)“更多(duō)”鏈接,通(tōng)過觸發該鏈接,向服務端發送Ajax請(qǐng)求,後台PHP程序得(de)到請(qǐng)求參數(shù),并作(zuò)出相應,獲取數(shù)據庫相應的記錄并以JSON的形式返回給前台頁面,前台頁面jQuery解析JSON數(shù)據,并将數(shù)據追加到列表頁。其實就是Ajax分頁效果。
XHTML
首先要引入jquery庫和(hé)jquery.more.js插件,jquery.more.js已經将許多(duō)功能都封裝好了,并提供了參數(shù)配置的功能。
xhtml結構如下:
值得(de)一提的是,樣式single_item,get_more是和(hé)jquery.more.js插件關聯的,你(nǐ)也可(kě)以取另外的class名字,但(dàn)是在配置的時(shí)候一定要将對應的class寫上(shàng)。
CSS
#more{margin:10px auto;width: 560px; border: 1px solid #999;} .single_item{padding: 20px; border-bottom: 1px dotted #d3d3d3;} .author{position: absolute; left: 0px; font-weight:bold; color:#39f} .date{position: absolute; right: 0px; color:#999} .content{line-height:20px; word-break: break-all;} .element_head{width: 100%; position: relative; height: 20px;} .get_more{margin:10px; text-align:center} .more_loader_spinner{width:20px; height:20px; margin:10px auto; background: url(loader.gif) no-repeat;}
以上(shàng)CSS是本例中定制(zhì)的,當然,大(dà)家(jiā)可(kě)以在實際項目中定制(zhì)不同的樣式。注意,more_loader_spinner是定義加載動畫(huà)圖片的。
jQuery
$(function(){ $('#more').more({'address': 'data.php'}) });
使用很(hěn)簡單,配置了後台地址:data.php,來(lái)看data.php是怎麽處理(lǐ)數(shù)據的。
PHP
data.php鏈接數(shù)據庫,本例使用本站(zhàn)文章PHP+Mysql+jQuery實現發布微博程序--PHP篇相同的數(shù)據表。
require_once('connect.php'); $last = $_POST['last']; $amount = $_POST['amount']; $user = array('demo1','demo2','demo3','demo3','demo4'); $query=mysql_query("select * from say order by id desc limit $last,$amount"); while ($row=mysql_fetch_array($query)) { $sayList[] = array( 'content'=>$row['content'], 'author'=>$user[$row['userid']], 'date'=>date('m-d H:i',$row['addtime']) ); } echo json_encode($sayList);
data.php接收前台頁面提交過來(lái)的兩個(gè)參數(shù),$_POST['last']即開(kāi)始記錄數(shù),$_POST['amount']即單次顯示記錄數(shù),看SQL語句就明(míng)白,其實就是分頁中用到的語句。
然後将查詢的結果以JSON格式輸出,PHP的任務就完成了。
最後來(lái)看下jquery.more.js的參數(shù)配置。
'amount' : '10', //每次顯示記錄數(shù) 'address' : 'comments.php', //請(qǐng)求後台的地址 'format' : 'json', //數(shù)據傳輸格式 'template' : '.single_item', //html記錄DIV的class屬性 'trigger' : '.get_more', //觸發加載更多(duō)記錄的class屬性 'scroll' : 'false', //是否支持滾動觸發加載 'offset' : '100', //滾動觸發加載時(shí)的偏移量
本文DEMO中需要單擊才能加載更多(duō)內(nèi)容,接下來(lái)的文章我将會(huì)制(zhì)作(zuò)通(tōng)過滾動條來(lái)觸發加載更多(duō)內(nèi)容的DOMO,敬請(qǐng)關注。
更新提示:最新版本已經可(kě)以支持鏈接、圖片等HTML标簽了,有(yǒu)需要的朋友(yǒu)請(qǐng)下載新的版本,直接替換jquery.more.js文件即可(kě)。