0

PaulIrishの無限スクロールプラグインに少し問題があります。結果が1ページしかない場合は完全に正常に機能しますが、結果が複数ページある場合は、最後のページが何度も繰り返されます。これが私の無限スクロール構成です:

$('#grid').infinitescroll({
navSelector  : "#paginationControl:first",
nextSelector : "#paginationControl a#next:first",
itemSelector : "#grid .entry",
debug : true,
bufferPx : 500
},
function(newElements){
//Apply masonry
var $newElems = $( newElements );
$newElems.imagesLoaded( function(){
    $("#grid").masonry( 'appended', $newElems );
});
    //See if this is the last page
if( curPage >= pages ){
    alert("Infinite scroll is paused.");
    $('#grid').infinitescroll('pause');
}
});

そして、これが私のページネーションコントロールです:

<?php if ($this->pageCount): ?>
<div class="paginationControl" id="paginationControl">
<!-- Previous page link -->
<?php if (isset($this->previous)): ?>
    <a href="<?php echo $this->url(array('page' => $this->previous)); ?>" id="previous">
        &lt; Previous
    </a> |
<?php else: ?>
    <span class="disabled">&lt; Previous</span> |
<?php endif; ?>

<!-- Numbered page links -->
<div id="numberedPages">
<?php foreach ($this->pagesInRange as $page): ?>
    <?php if ($page != $this->current): ?>
        <a href="<?php echo $this->url(array('page' => $page)); ?>">
        <?php echo $page; ?>
        </a> |
    <?php else: ?>
        <?php echo $page; ?> |
    <?php endif; ?>
<?php endforeach; ?>
</div>
<!-- Next page link -->
<?php if (isset($this->next)): ?>
    <a id="next" href="<?php echo $this->url(array('page' => $this->next)); ?>" >
    Next &gt;
    </a>
<?php else: ?>
    <span id="next" class="disabled">Next &gt;</span>
<?php endif; ?>
</div>
<?php endif; ?>

最後のページの次のページセレクターが無効になっているため、最後のページに到達すると停止することがわかりました。最後のページを何度もロードし続けるのはなぜですか?また、それが発生しないようにするにはどうすればよいですか?

編集:

この質問に触発されて、コールバック関数にifチェックを追加して、しばらくしてスクロールを停止しようとしました。jQueryInfiniteScrollプラグインは最後のページを何度もロードします

//See if this is the last page
if( curPage >= pages ){
    alert("Infinite scroll is paused.");
    $('#grid').infinitescroll('pause');
}

ページが使用可能な最後のページとして定義され、curPageが現在のページである場合、呼び出しごとに増分されます。チェックはある時点で完全に機能していましたが、何かを変更しました。何がわからないので、なぜかエラーが発生$("#grid").infinitescroll is not a function $('#grid').infinitescroll('pause');しました。その時点で無限スクロールが機能していないことがはっきりとわかりません。そもそもjavascriptがそれに到達するためでなければなりませんでした。関数エラーではなく、どうすればこれを取り除くことができますか?

4

1 に答える 1

0

zendのページ番号に存在しないページ番号を指定すると、最も近い有効なページ番号が取得されます。有効なページが20あり、400番目を取得しようとすると、単に20番目が返されます。バックエンドに404をスローするコードを追加しましたが、時間どおりに停止します。無限スクロールスクリプトは、バックエンドがエラーをスローするまでページをロードし続けるため、それが繰り返されていることを認識しませんでした。

if($page_num > $pager->getPages()->pageCount){
        $this->_response->clearBody();
        $this->_response->clearHeaders();
        $this->_response->setHttpResponseCode(404);
    } 

ページネーションコントロールで無効になっている次のページセレクターは、無限スクロールスクリプトが次のページを選択するのを止めなかったと思います。これは、コントロールを使用してページのURLスキームを把握し、そこから数字を増やすだけだからです。

于 2012-07-23T20:03:14.737 に答える