このページの本文へ

前へ 1 2 3 次へ

  • twitterでつぶやく
  • はてなブックマークに登録
  • del.icio.usに登録
  • livedoorクリップに登録
  • Buzzurlに登録
  • StumbleUponに登録
  • Google Bookmarksに登録
  • Facebookでシェア
  • Yahoo!ブックマークに登録
  • お気に入りに登録
  • 本文印刷

Web制作の現場で使えるjQuery UIデザイン入門 ― 第24回

jQueryとAjaxで作るスムーズページング

2009年12月17日 11時00分更新

文● 西畑一馬/to-R


 スクリプト部分は次のようになります。

サンプル01(スクリプト部分)



$(function(){          $("#content").load($("ul.pager li a:first").attr("href")+" #content");     $("ul.pager li a:first").addClass("selected");          $("ul.pager li a").click(function(){                  $("#content").html('<p class="loading"><img src="images/loading.gif" alt="" /></p>');                  $("#content").data("file",$(this).attr("href"));                  $('html,body').animate({ scrollTop: $("h1").offset().top-20 }, 'slow','swing',function(){             $("#content").load($("#content").data("file")+" #content");         })                  $("ul.pager li a").removeClass("selected");         $(this).addClass("selected");         return false;     })      })

 最初の2行目~3行目はページの初期表示状態を設定をしています。ul.pager内の1番目のa要素のhref属性をattr()で取得し、「 #content」を連結します。これで「data1.html #content」という1ページ目のデータファイルのパスができ上がりますので、load()(関連記事)を使って読み込み、#content内に挿入します。


$("#content").load($("ul.pager li a:first").attr("href")+" #content");


 次に、現在表示中のページ番号が分かるように、1番目のナビゲーションリンク(ul.pager li a:first)に先ほどCSSを定義したclass属性「selected」を設定します。


$("ul.pager li a:first").addClass("selected");


 Ajaxでページングする処理は、各ページのリンクにclickイベントで設定します。a要素にclickイベントを設定する場合はreturn falseを忘れずに記述しましょう(関連記事)。


$("ul.pager li a").click(function(){
    
    return false;
})


 clickイベントでは、まずhtml()(関連記事)で#contentの内容をローディングアイコンに差し替えます。ローディングアイコンはデータの読み込みが終わるまでの間、表示されます。


$("#content").html('<p class="loading"><img src="images/loading.gif" alt="" /></p>');


 次にdata()(関連記事)を使って、クリックされたa要素のhref属性の値を「file」という名前で保存します。


$("#content").data("file",$(this).attr("href"));


 続いてanimate()でページ内スクロール(関連記事)を設定し、ページ上部に画面を移動させます。animate()のコールバック関数内にload()を記述し、#contentの内容をdata("file")に保存したパスの#contentと差し替えます。


$('html,body').animate({ scrollTop: $("h1").offset().top-20 }, 'slow','swing',function(){
    $("#content").load($("#content").data("file")+" #content");
})


 最後に、ナビゲーションリンクからいったんclass属性「selected」を取り除き、新たにクリックされたa要素に「selected」を追加します。


$("ul.pager li a").removeClass("selected");
$(this).addClass("selected");


 以上でAjaxを使ったスムーズなページング処理が完成しました。


【クライアントのわがままに応える!】

もっと大量のデータをAjaxで表示したい!

 サンプル1は商品情報を外部のHTMLからAjaxで読み込んで表示しました。数件の商品情報であればこれでも構いませんが、大量の商品情報を扱う場合にはあまり現実的な方法ではありません。むしろ、実務上はデータベースからデータを取得して表示することが多いでしょう。たとえば、Webブラウザー側からのGETリクエストに対応して情報を送信できるプログラムをサーバー側に用意しておき、ナビゲーションリンクを以下のようなパラメーター付きのURLに変更します。


<ul class="pager">
    <li><a href="data.php?page=1">1</a></li>
    <li><a href="data.php?page=2">2</a></li>
    <li><a href="data.php?page=3">3</a></li>
</ul>


 ほかにも、XMLやJSONなどのデータを取得して表示する場合もあります。システムを担当するエンジニアと相談しながら要件に応じて柔軟に対応しましょう。


著者:西畑一馬(にしはた かずま)

著者写真

to-R代表、Webクリエイター。PHPによるシステム開発や、CMSを利用したWebサイト制作、SEO対策などのマーケティング、コンサルティング、Webクリエイター向けの講座などを業務で行なっている。また、ブログto-RではJavaScriptやSEO対策、CSS、Movable TypeなどのWeb制作にかかわるさまざまな情報を発信している。
主な著書に「現場のプロから学ぶXHTML+CSS」(共著、毎日コミュニケーションズ刊)がある。

前へ 1 2 3 次へ

カテゴリートップへ

この連載の記事

ASCII.jp会員サービス 週刊Web Professional登録

Webディレクター江口明日香が行く

みんなが買ってる最新アイテムはコレだ!

Microsoft Windows 7 Home Premium 通常版 Service Pack 1 適用済み

iPhone 4S/4 防指紋性・高光沢機能性フィルム PRO GUARD AF for iPhone 4S/4 / PGAF-IPH4

iPhone 4S/4 防指紋性・高光沢機能性フィルム PRO GUARD AF for iPhone 4S/4 / PGAF-IPH4

マイクロソリューション Micro Solution Inc.

83人が購入

BenQ 24型 LCDワイドモニタ XL2420T

BenQ 24型 LCDワイドモニタ XL2420T

ベンキュージャパン

37,238円〜

3人が購入

jQuery Mobile スマートフォンサイト デザイン入門 (WEB PROFESSIONAL)

jQuery Mobile スマートフォンサイト デザイン入門 (WEB PROFESSIONAL)

アスキー・メディアワークス

2,499円〜

20人が購入

メモリーカード 32GB (PCH-Z321J)

メモリーカード 32GB (PCH-Z321J)

ソニー・コンピュータエンタテインメント

7,772円〜

6人が購入

Amazon.co.jp