morolicious開発日記

MojoliciousとBootstrapで作られているレスポンシブなエロサイト「morolicious」の開発記録を綴りっています

関連ビデオの無限スクロール部分を改善

昔のTwitter的な無限スクロールUIを使っていますが、ある程度無限スクロール情報を表示した後に画面遷移(ビデオページに移動)すると、ブラウザの戻るボタンを押した時に元のページが以前の状態で表示されない問題がありました。

Ajaxを使って動的に要素を追加すると起きる問題ですが、ブラウザのhistoryを操作することによって改善できるようです。

ブラウザのhistoryにアクセスするAPIには

window.history.pushState window.history.replaceState

というものがあります。pushStateは履歴に新しく追加します。replaceStateの場合は履歴を書き換えるようです。詳しくはこちらで解説されています。

今回は、今をときめくcookpadさんのモバイルサイトの「続きをみる」を参考に、次ページの情報を表示する時には bulk_load というクエリーを追加することにしました。

例えば、 http://morolicio.us/video/48653 というページの場合は、「もっと見る」ボタンを押した時に、 http://morolicio.us/video/48653?bulk_load=24 となります(PC版の場合)

ブラウザの履歴書き換えには window.history.replaceState を使用します。

window.history.replaceState(null, null, '?bulk_load=24');

戻る・進むボタンを押した時のイベントはこんな感じ。

$(window).bind("popstate", function() {
    $container.infinitescroll({
        state: { currPage: 2 }
    });
});

主要ブラウザ(SafariChromeFirefoxOpera)で確認してみましたが、そこそこ動いているようです。IEは当然確認していません。Operaだけはうまく動作していないようです。

参考サイトにはちゃんとしたコードがあるので、もう少しきちんと動作するようにJavaScript書き直したいと思います。

参考サイト