このようなレイアウトは 2011 年に Pinterest が設立されて以来、中国のインターネットですぐに Pinterest を模倣するブームが巻き起こりました。Huaban.com や Meilishuo など、滝の流れのレイアウトを使用する国内の Web サイトは数多くあります。 、など。実際、中国のインターネットでは、海外で人気のあるモデルを模倣すること(もちろん、模倣または盗作と呼ぶこともできます、笑!!)は常に良いアイデアとされてきました。
さて、本題に入りましょう。ここでは主にウォーターフォールフローの実装方法である絶対配置(css)・javascript・ajax・jsonを紹介します。簡単に言うと、スクロール読み込みを行わない場合、スクロールしてさらにコンテンツを読み込むときに Ajax と json が使用されます。
実装アイデアは次のとおりです:
1. ページの幅と、ページ上にデータ ブロックを配置できる列数を計算します (上の図に示すように、列は 6 つあります)。
2. 各データ ブロックの高さの寸法を配列に記録します (すべての画像がロードされるまで待つ必要があります。そうしないと、画像の高さがわかりません)。
3. 最初の行の先頭位置は同じであるため、最初に絶対位置を使用してページの最初の行を埋め、次に配列を使用して各列の合計の高さを記録します。
4. 引き続き絶対配置を使用して、最も短い列の後に他のデータ ブロックを配置し、列の高さを更新します。
5. ブラウザのウィンドウサイズが変わった場合は、上記の手順1~4を再度実行して並べ替えます(ページ幅に応じて列数が変わるため、並べ替えが必要です)。
6. スクロールバーが一番下までスクロールすると、新しいデータが読み込まれ、最も短い列の位置に配置され、列の高さが更新されます。
アイデアはありますが、それをコードで実装する方法が重要です。もちろん、上記の 6 つの手順を読んで実装方法がすでにわかっている場合は、以下の内容を詳しく読む必要はありません。
まず、ページに基本的な HTML と CSS を記述します (便宜上、CSS は外部にリンクされません)。コードは次のとおりです:
1. ページの幅と、ページ上にデータ ブロックを配置できる列数を計算します。
2. 各データ ブロックの高さの寸法を配列に記録します
ウィンドウ サイズを変更する場合も、フロー メソッドを再度実行するだけで非常に便利です。
コードをコピーします
コードは次のとおりです:
主にscroll()を見てください。ここで、_addItem() と _requeat() はscroll() によって呼び出され、_appendhtml() は _addItem() によって呼び出されます。
このステップのプロセス全体は次のとおりです。ページがデータの最も短い列の一番下までスクロールすると、新しいデータをロードするために Ajax リクエストが発行され、データ内のすべての画像がロードされた後に追加されます。項目の高さを配列 lenArr に書き込み、新しく追加されたデータ項目を、各項目が最も短い列の後ろに配置されるという規則に従って適切な位置に配置および配置されます。読み込み中の画像が下の位置に移動します。
上記のアイデア全体を要約すると、言及する価値のある箇所が 4 つあります :
1. ブラウザ ウィンドウをズームするとき、onresize が頻繁にトリガーされます。パフォーマンスの低下を軽減するには、並べ替えを実行する前にズームが完了するまで待つ必要があります。これを処理するには、setTimeout を使用します。 。
2. ページが一番下までスクロールして新しいデータが読み込まれたら、新しいデータを配置するだけです。
3. 上記のアイデアでは、新しいデータをロードするときに、画像がロードされるまで待つ必要がありますが、実際のプロジェクトでは、サーバーが高さの値を与えるのが最適です。
4. スクロールによって新しいデータの読み込みがトリガーされる場合、イベントの複数のトリガーを回避します。上記のアイデアは、onscroll イベントを空に設定し、読み込みが完了した後にイベントを復元することです。
完全なコードを最後に添付します:
flow.html