7

Reddit の投稿に別の書式設定スタイルを適用するシンプルな小さな Web サイトを作成しています。無限スクロール jQuery プラグインを追加しようとしていますが、何もしません。無限スクロール ページの (非常に単純な) 指示に従ってみましたが、何も起こらなかったときは、何か間違って入力したに違いないと思いましたが、Masonry/Infinite-Scroll のからコードをコピーして貼り付けただけで、それでもうまくいきませんでした。Masonry は完全に (最終的に) 機能していますが、無限スクロールの何が問題なのかわかりません。私は jQuery と JavaScript の基本を理解していますが、明らかにあなたのほとんどの人ほどではありません。私のサイトはreddit.ymindustries.comにあります。

おかげさまで、これまで私に失敗したことはめったにありません。

YM

編集: ホームページのページを埋めるのに十分な画像がない場合は、reddit.ymindustries.com/r/awwにアクセスして他の画像を入手してください。

編集 2: 私は問題を特定したと信じて ます。

EDIT 3:ちょっとしたハックを追加して動作させましたが、2番目のページを無限にループしているようです. うーん...

4

3 に答える 3

0

あなたの問題は実際にはcssだと思います。ページをクライアント領域の高さより長くします。$container にさらに画像を追加

ポイントは、 $container の下端がウィンドウの下部を通過する必要があるため、スクロールイベントが発生し、無限スクロールがこのイベントに反応して天気を計算できるか、端に達していないかです

ところで、同じ場合、たとえば、ウィンドウを縮小すると、設定した例が機能します。

===更新===

私はinfinitescrollで遊ぶ時間を見つけました。これが最終的な作業スクリプトです。スクリプトにpathParseメソッドを設定するだけです

$(function () {

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

        $container.imagesLoaded(function () {
            $container.masonry({
                itemSelector:'.item'
            });
        });
        $container.infinitescroll({
                    navSelector:'.navigation', // selector for the paged navigation
                    nextSelector:'.navigation #next', // selector for the NEXT link (to page 2)
                    itemSelector:'.item', // selector for all items you'll retrieve
                    bufferPx:40,
                    debug:true,
                    columnWidth:function (containerWidth) {
                        return containerWidth / 5;
                    },
                    loading:{
                        finishedMsg:'No more pages to load.',
                        img:'http://i.imgur.com/6RMhx.gif'
                    },
                    pathParse: function(path,page){
                        return $(this.nextSelector).attr("href");
                    }
                },
                // 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);
                    });
                    //console.log("test (never fired :( )");
                }
        );

    });

さて、次のリンクはそれ自体では更新されないため (http://reddit.ymindustries.com/?after=t3_yh4av)、コールバックを変更して ajax 応答から最後の要素を引き出し、次のリンクを変更する必要があります...このようなものかもしれません

function (newElements) {
                        // hide new items while they are loading
                        var $newElems = $(newElements).css({ opacity:0 });
                        // ensure that images load before adding to masonry layout

                        // ======> if query parameter after=... is caring filename then do this
                        var lastImageUrl= $newElements[$newElements.length-1].attr("src");
                        var lastFileName= lastImageUrl.substring(lastImageUrl.lastIndexOf("/") +1, lastImageUrl.lastIndexOf("."));
                        $("#next").attr("href", "http://reddit.ymindustries.com/?after="+lastFileName);

                        $newElems.imagesLoaded(function () {
                            // show elems now they're ready
                            $newElems.animate({ opacity:1 });
                            $container.masonry('appended', $newElems, true);
                        });
                        //console.log("test (never fired :( )");
                    }
于 2012-08-18T14:51:17.970 に答える
0

jQueryの「無限スクロール」とMasonryでも同じ問題がありました。プラグインのスクロール検出が開始されるように、ページに初期項目を追加することでこれを解決できます。

WordPress では、これは「読み取り」設定の下にあります。デフォルトでは、WordPress は一度に 10 個のアイテムしか開きません。その数を 100/ページに増やして、最初にウィンドウがいっぱいになることをより確実にすることができます。ここに恐ろしいコードがいくつかありましたが、コードではなく、より長いページが必要であることがわかりました。

そのため、十分な画像がない場合、大きなディスプレイでこれらのプラグインをテストすることは困難です。おそらく解決策は、大型ディスプレイで画像を拡大して、コンテンツをスクロールしなくても確実に表示できるようにすることです。

誰かがあなたのウェブサイトに非常に巨大なディスプレイでアクセスする可能性があると思われる場合、より多くのアイテム/ページを表示$('#masonry').infinitescroll('retrieve');し、場合によっては余分なページをロードするためにフッターに追加する以外に答えはわかりません.

于 2015-01-18T21:01:13.137 に答える
0

メイソンリー/アイソトープ (バージョン 2.0b2.110713) に付属するものを使用する場合、両方とも関数を呼び出して定義済み配列:

//old code, to be changed (line 489)
desturl = path.join(opts.state.currPage);
// new code
desturl = (typeof path === 'function') ? path(opts.state.currPage) : path.join(opts.state.currPage);

これは、新しいバージョンの無限スクロールで既に修正されています

于 2013-01-30T17:58:25.050 に答える