DEVELOPERS BLOGデベロッパーズブログ
- HOME >
- 加藤 正人のデベロッパーズブログ >
- jQuery 無限スクロールのメモ
加藤 正人のデベロッパーズブログ
- 氏名
- 加藤 正人
- 役職
- 多分SE
- 血液型
- 秘密
- 出没
- 美味しいもののあるところ
- 特色
- タヒチ大好き。ちょいメタボ。
- 2020/12/15
- CakePHP3 のリダイレクトがうまく行かない例
- 2020/11/12
- Apache Bench
- 2020/10/05
- PhpSpreadsheet でExcel ファイルを読み込む (CakePHP3)
先日「無限スクロール」に関する話題が社内で出たのでメモ。
スマホ対応サイトの場合、表示データが多い場合にページングをするのは様々な理由で好まれない。代わりに一定の条件 (「もっと見る」をタップするとか、スクロール下端に近づいた等) をトリガーにして次の表示データを取得し追加表示する方法をとることが多い。
この方法だと、ページ遷移することなく特定領域内に無限にデータが表示されるように見えるので、本来の「スクロールポジションをトリガーとする場合」の他、タップをトリガーとする場合等も含め「無限スクロール」と呼ばれる。
この動作はサーバー側ではなくクライアント (ブラウザ) 側で行なうことになるので、クライアント側には
- クライアント上でのトリガー検出と処理の実行
- 追加表示するためのデータの取得方法
が必要となる。通常は前者を JavaScript、後者を ajax で行なうことが多い。 (それ以外の方法もあることはある。)
同様にサーバー側はクライアント側からの ajax 通信の受け口が必要となる。この受け口ではクライアントからの指示に従ってデータを集計し、必要な形式 (json や HTML 等) に変換して返すことになる。
JavaScript で実装するのであれば、jQuery ライブラリを利用することでセレクタによる要素アクセスや通信を包括的かつ容易に行うことが可能となる。ajax で取得するデータは HTML 整形済みデータ、または JavaScript と相性の良い json データが便利。
■シンプルな実装例 (ボタンタップをトリガーとする例)
データ表示部分
JavaScript コード部分
なお、取得するデータがランダムでなく順序を持つ場合、表示すべき位置の情報をクライアント (ブラウザ) 側とサーバー側で共有する必要がある。その場合は、共有をする方法としては
- クッキーにページ情報を保持して共有する
- URL にページ情報を埋め込み、表示データと共に次のページ情報を返す
等が利用できる。
関連エントリー
- 2017/07/08
- 時刻入力用 jQuery Plugin TimePicki の不具合調整
- 2017/04/30
- jQuery プラグイン「Touch Punch」
- 2016/03/12
- Safari のフォームボタンと jQuery submit()
- 2015/12/19
- スマホ向けサイトの click と touch
- 2014/10/11
- Google Chart へのアクセスをヘルパーで実装してみる【その2】
- 2014/02/22
- IE8 と style 値でハマった話
- 2013/08/17
- jQuery UI Dialog と z-index
- 2013/06/01
- jQuery UI ボタンと IE8 のワナ
- 2013/05/17
- jQuery v2 は IE6/7/8 をサポートしない!
- 2013/03/09
- JavaScript でバリデーション
- 2013/02/23
- JavaScript で入力フィールドの文字カウンタを実装してみる
2020/12/15
2020/11/12
2020/10/05
2020/09/11
2020/08/03