1

私は周りを検索してさまざまなロジックを調べましたが、非常に近いと思いますが、無限スクロールスクリプトでデータを石積みに追加することはできません。データをプルしている間にAJAXファイルがあり、これはスクロール時にデータをプルするファイル内のメインラインです:

        function getData() {

            // Post data to ajax.php
            $.post('ajax.php', {

                action        : 'scrollpagination',
                number        : $settings.nop,
                offset        : offset,

            }, function(data) {

                // Change loading bar content (it may have been altered)
                $this.find('#spinner').html($initmessage);

                // If there is no data returned, there are no more posts to be shown. Show error
                if(data == "") { 
                    $this.find('#spinner').hide();  
                }
                else {



                    // Offset increases
                    offset = offset+$settings.nop; 

                    // Append the data to the content div
                    $this.find('.content').append(data);


                    // No longer busy!  
                    busy = false;
                }   

            });

        }

「$this.find('.content').append(data);」という行を編集してみました。これは単にデータを取得して、メイン インデックス ファイルの masonry 関数内にあるコンテンツ div に入れるだけだからです。

私は次のようなことを試しました

$this.find('.content').append(data).masonry ('reload');

しかし、それを適切に機能させてデータを追加させることはできません。

コードの残りの部分は機能しており、スクロールは適切に機能し、データをプルしていますが、石積みに追加されません。

どんなヒントでも、私は何か非常に些細なことを見逃しているように感じます。

前もって感謝します!

4

2 に答える 2

9

Masonry (新しいバージョン 3) でも同じ問題がありました。キーは、AJAX/GET/POST が返すものに対する .filter() です。Masonry にはバグがあり、ここで読むことができます。回避策は .filter() を使用することです。

    // Make jQuery object from HTML string
    var $moreBlocks = jQuery(data).filter('div.block');

    // Append new blocks to container
    jQuery('#container').append( $moreBlocks );

    // Have Masonry position new blocks
    jQuery('#container').masonry( 'appended', $moreBlocks );        

ここで役立つ小さなデモを作成しました: http://labs.funkhausdesign.com/examples/masonry/appended.html

于 2013-07-25T18:46:34.833 に答える