9

私は、jQuery MasonryおよびInfinite Scrollプラグインを使用して、API を使用して instagram から "n" 量の写真をロードするプロジェクトに取り組んでいます。この短いを見ると、レンダリングする html ページを事前に用意しておく必要があることがわかります。

<nav id="page-nav">
  <a href="pages/2.html"></a>
</nav>

問題は、何枚の写真が取得されるか本当にわからないことです。たとえば、一度に20枚の写真を取得する方法を次に示します。

    $(document).ready(function(){       
        var access_token = location.hash.split('=')[1];

        if (location.hash) {

              $.ajax({
            type: "GET",
            dataType: "jsonp",
            cache: false,
            url: "https://api.instagram.com/v1/users/MY_USER_ID/media/recent/?access_token=MY_ACCESS_TOKEN",
            success: function(data) {

                for (var i = 0; i < 20; i++) {
            $("#instafeed").append("<div class='instaframe'><a target='_blank' href='" + data.data[i].link +"'><img src='" + data.data[i].images.standard_resolution.url +"' /></a></div>");   
                }     

            }
        });


        } else {
        location.href="https://instagram.com/oauth/authorize/?display=touch&client_id=MY_CLIENT_ID&redirect_uri=MY_URI"; 

        }

    });

ページネーション メカニズムが必要になると思いますが、上記のチュートリアルに基づいて、ロードする html ページを事前に定義する必要があると思います。だから今ここに私の質問

  1. それは、このプラグイン ( Infinite Scroll ) が無限スクロールを実現するために、ディレクトリに「n」個の html ファイルが必要であることを意味しますか?
  2. ページ数がわからない場合、同じプラグインで無限スクロールを実装することは可能ですか? 物理的な html ファイルを作成する必要さえなくても、さらに良いことはありますか?
  3. この種のページネーションはどのように実装できますか? (つまり、ユーザーが下にスクロールし続ける限り、20 枚の写真のチャンクをロードします) オンラインのドキュメントはそれほど多くありません。デモや説明の簡単な手順を教えていただけますか?

敬具

4

2 に答える 2

12

1) このプラグイン (Infinite Scroll) には「n」個の html ファイルが必要ということですか?

絶対違う。事前に静的な html ページを生成する必要はありません。必要なのは、URL の 1 つの数字を変更することで後続のページ コンテンツを取得できる URL スキームだけです。

無限スクロール プラグインの観点から考えてみてください。ページ #1 にプラグイン JavaScript をロードし、ページ #1 内にページ #2​​ へのリンクを提供します。ユーザーがページ #1 を過ぎてスクロールすると、プラグインが持つ唯一の変数は、2、3、4 (N) などの現在のページ番号です。

プラグインは、ユーザーがスクロールしているときにコンテンツを取得するための URL を作成する必要があります。では、プラグインはどのようにそれを行うのでしょうか? プラグインは、ページ #1 で提供される次の URL 構造を調べて解析し、「ベース パス」を作成します。このパスに current_page_number を追加して、後続のコンテンツをフェッチします。それがNAVセレクターの役割です。

では、ページ#1 の次の URL として/home/page/2のようなものがあるとします。プラグインはこれを次のように配列に解析します。

[/ホーム/ページ/,2]

base_path = "/home/page/"と考えてください

プラグインが page_number 3 をフェッチしようとすると、 base_path.join(current_page_num) のようにベースパスに 3 を追加して/home/page/3にします

サーバー側では、/home/page/1 から /home/page/N へのすべてのリンクを処理するコントローラーを使用できます。プラグインの内部を見て、_determinePath を探し、関数を取得するだけです。

これで、問題も確認できます。問題は、コード内でページネーションをどのように行っているか、および必要な変数の数に応じて、無限の種類の URL 構造が存在する可能性があることです。私のページネーションのやり方は、あなたのページネーションのやり方とは異なります。フレームワークについても同じことが言えます。Drupal のページネーション スキームは、Djanga や wordpress などとは異なる場合があります。

プラグインは、これらすべての URL 構造に対応できない可能性があります。次の URL が与えられた場合、current_page_number を追加する必要がある「ベース パス」を常に推測できるとは限りません。プラグインの _determinePath() メソッドを再度見て、どのような URL に対応できるかを確認します。page2.html や page=2 などの単純な URL 構造を解析できますが、URL 構造が複雑な場合やプラグインで処理できない場合は、独自の実装を提供する必要があります。pathParse() メソッドも見てください。

2)ページ数がわからない場合、同じプラグインで無限スクロールを実装することは可能ですか?

ここでも、HTML ファイルを作成する必要はありません。コンテンツの終わりを知らせるには 2 つのオプションがあります (事前に何枚の写真があるかを知らなくても)

  • 「コンテンツなしの状態」に達すると、HTTP 404 を返すことができます。
  • または、空の文字列を返すことができます。

これは質問に答えていますか?

プラグインとの連携方法

  • 最初のページ - インクルード - NAV SELECTOR - 通常の方法で THNIGS をロード
  • 読み込み時の最初のページ - Instagram のページネーションを使用し、JavaScript のどこかに「nextURL」を保存します
  • スクロール時 - _determinePath をオーバーライドして、(2) を使用して独自のフェッチ URL を提供します - プラグインにその URL を取得させます
  • プラグイン コンテンツ セレクターをオーバーライドする - 新しい要素をコールバックに返す
  • プラグイン フェッチ コンテンツ - プラグイン内のコールバックを使用してページを更新します

github リポジトリの更新

PHP サーバー側の統合に関するドキュメントを追加するために、paul の github リポジトリをフォークしました。次の URL が現在のページ番号のみに依存するというプラグインの仮定は、制限が厳しすぎると思います。次のページのコンテンツから nextURL を取得する必要があります。

Github リポジトリ - https://github.com/rjha/infinite-scroll

ベース リポジトリでのプル リクエスト - https://github.com/paulirish/infinite-scroll/pull/219

私の JavaScript の知識は非常に限られているため、ベース プラグインを拡張するより良い仕事ができるかもしれません。しかし、一滴一滴が海を作るのに役立ちます:)

于 2012-07-21T19:36:14.483 に答える
5

それは、このプラグイン (Infinite Scroll) が無限スクロールを実現するために、ディレクトリ内に「n」個の html ファイルを持つ必要があるということですか?

はい、その特定のプラグインは、「次のページ」リンクを使用する静的ページのみをサポートするように設計されているようです。あなたが見つけたチュートリアルでは、動的に生成されたコンテンツを URL パラメータで処理できないとさえ述べていますが、私はそれを信じていません。

ページ数がわからない場合、同じプラグインで無限スクロールを実装することは可能ですか? 物理的な html ファイルを作成する必要さえなくても、さらに良いことはありますか?

そのプラグインの設計上、私はNoと言います。もちろん、(不明な) 量の動的に生成されたページを写真と共に使用できるはずです。これには、サーバー側のコードを instagram API から提供する必要がありますが、これはあなたが望むものではないようです。

この種のページネーションはどのように実装できますか? (つまり、ユーザーが下にスクロールし続ける限り、20 枚の写真のチャンクをロードします) オンラインのドキュメントはそれほど多くありません。デモまたは説明の簡単な手順を教えてください。

他にも無限スクロールプラグインがあります。あなたが見つけたそのサイトのデモ 2 と 5 は、単純な「ネイティブ」(つまり、プラグインなし) の無限スクロールを実装し、どちらも ajax 経由で新しいコンテンツをロードします。デモ 3 と 4 では、エンドレス スクロール プラグインといくつかのスクロール オプションを使用していますが、デモには ajax は含まれていません。

これで、スクリプトの実装方法を自由に決めることができます。最初は instagram からすべての画像 URL を取得したいようですが、チャンクごとにのみ追加 (したがって画像ファイルをロード) します。Instagram がページ化された API をサポートしている場合は、両方の読み込みプロセスを組み合わせることができます。

これは、デモ 2 から 5 のようなコードで実行できます。スクロールがページの最後に達したら、画像をロードするリクエストをトリガーします。その後、新しい img 要素 (または例のように instaframe div) で Masonryappendedメソッドを呼び出します。

于 2012-07-17T20:18:13.187 に答える