私はbase Mansory layoutを使って基本イメージグリッドを作成しています。無限のスクロールページを構築するために、データベースから数百または数千の画像をロードする必要があるため、主に読み込み時間のためにすべてをダウンロードする必要はありませんが、すべての無駄なトラフィック(彼がそれに達するまでスクロールしない限り、ユーザーは画像#500を読み込まないでください)。 これを実現するには、jQuery LazyLoadプラグインを使用しようとしました。石積み+ LazyLoad - イメージが重複する
これは私が私の石積みのイメージグリッドを埋める方法です:
<ul class="grid effect-3" id="grid">
<?php
for ($i = 0; $i < count($thumbArray); $i++) {
if ($i < 9) {
echo '<li><img class="img-grid" alt="' . $descArray[$i] . '" data-fullsize="' . $imgArray[$i] . '" src="' . $thumbArray[$i] . '"></li>';
} else {
echo '<li><img class="img-grid lazy" alt="' . $descArray[$i] . '" data-fullsize="' . $imgArray[$i] . '" data-original="' . $thumbArray[$i] . '"></li>';
}
}
?>
</ul>
は、基本的には、事前に最初の9の画像をロードして、他の人に「怠惰な」CSSクラスを追加するだけでなく、「SRC」属性を置き換えますLazyloadの「データオリジナル」と一緒に。
( 'alt'と 'data-fullsize'属性がありますが、ライトボックスシステムに使用していますが、この質問の目的で無視することができます)。
<script src="js/jquery.lazyload.js"></script>
<script>$("img.lazy").lazyload();</script>
プラグインをインポートし、クラス.lazyでタグをのimgためにそれを適用する:私は持っているのindex.phpスクリプトの終わりに
。あなたのよう
:
問題は、私があるため、画像の高さを知らないのを前提とするという事実にある、石積みグリッドシステムはLazyloadプロセスによってロードされているすべての画像をオーバーレイ9番目のイメージ(lazyload指定が開始されたとき)の後に、イメージが互いにオーバーレイするのを見ることができます。私はこれは画像の位置が、JavaScriptとJavascriptを使って計算されるためです。絶対位置と上端と左端の属性が設定されているためですが、わかりません。
メーソンリーのウェブサイトを見ると、最初のFAQ itemがこれに関連しています。私がやろうとしたが、成功しなかったimagesLoadedの使用についてアドバイスします。
- 私はPHPのgetimagesize()でイメージの高さを計算し、インラインスタイル属性として設定しようとしましたが、サーバーには強すぎて読み込みに時間がかかりすぎます。
- また、ページの最後に到達したときに項目を追加しようとしましたが(XHRを使ってDB項目を取得するのは簡単な解決策になります)、成功しませんでした。おそらく、このためにMasonryの追加機能を使用する必要がありますか?
ボトムラインは、数日間、類似のスレッドを読んで、複数のソリューションを実装していますが、役に立たないソリューションを見つけることを試みてきました。画像のサイズが変わる可能性があるので、私の目的のためにMasonryグリッドシステムが表示されていますが(たとえば、垂直画像ごとにギャップが必要ないなど)、実際にLazyloadと組み合わせるのは面倒です必要以上に多くの負荷がかかってしまい、サーバーが不必要なストレスを受けることになります。
オーバーレイしない画像はどうしたらいいですか?ありがとうございます(y)
ありがとう、この情報を使用し、別のSOの回答からいくつかのコードを使用して私は私の問題を解決することができた。 この質問の最初の回答は、コードを見つけることができます。[link](https://stackoverflow.com/questions/10096300/combining-lazyload-and-jquery-masonry) – user1298923