3

私は石積みと、実際にはライブラリを使用しない無限スクロールの一種のバージョンを使用しています。最初の画像は正しくレイアウトされますが、追加された画像はそうではありません..それらは行に追加されるだけです.

これは、位置を選択するための高さ/幅のプロパティを持たない文字列から読み込まれるためだと思います。あらかじめ決められたサイズのdivでそれらをラップすると、正しくレイアウトに入るからだと思います(ただし、画像はすべて異なる高さになります)

石積みをレイアウトに正しく適用する一連の画像がページロードに設定されています。

次に、SQL への PHP 呼び出しを使用して、画像パスの配列を収集し、これを JavaScript 配列に変換します。

var images = [
<?php
foreach ($images as $image) {
echo "'/$image',\n";
} ?>
];
$(images).each(function() {
var image = $('<img />').attr('src', this);
});
</script>

次に、石積みの追加を使用して、トリガー イベントで一度に 5 つずつ読み込みます。

$appendage +=  '<div class="box append"><img src="' + images[i] + '" /></div>';
count++;
    }   

var $container = $('#result');      
$container.append( $appendage ).masonry( 'appended', $appendage );  

画像をプリロードするためのあらゆる種類のスキームを試しましたが、役に立ちませんでした..

    $(images).each(function() {
     (new Image).src = this;
    });

誰もが方法を提案できますか?おそらく、画像パスのデータベースから、一番下までスクロールしたときに追加として石積みに読み込まれる画像に移動するためのより良いアプローチです

ありがとう!

4

1 に答える 1

0

これを見たことがありますか? http://masonry.desandro.com/demos/infinite-scroll.html

関連する JavaScript は次のとおりです。

$(function(){

    var $container = $('#container');

    $container.imagesLoaded(function(){
      $container.masonry({
        itemSelector: '.box',
        columnWidth: 100
      });
    });

    $container.infinitescroll({
      navSelector  : '#page-nav',    // selector for the paged navigation 
      nextSelector : '#page-nav a',  // selector for the NEXT link (to page 2)
      itemSelector : '.box',     // selector for all items you'll retrieve
      loading: {
          finishedMsg: 'No more pages to load.',
          img: 'http://i.imgur.com/6RMhx.gif'
        }
      },
      // trigger Masonry as a callback
      function( newElements ) {
        // hide new items while they are loading
        var $newElems = $( newElements ).css({ opacity: 0 });
        // ensure that images load before adding to masonry layout
        $newElems.imagesLoaded(function(){
          // show elems now they're ready
          $newElems.animate({ opacity: 1 });
          $container.masonry( 'appended', $newElems, true ); 
        });
      }
    );

  });
于 2012-12-29T05:42:26.360 に答える