Плагин jQuery с бесконечной прокруткой продолжает заполнять последнюю страницу - PullRequest
0 голосов
/ 23 марта 2012

Проблема, с которой я сталкиваюсь, заключается в том, что плагин infinitescroll достигает последней действительной нумерации страниц, а затем, если вы снова прокрутите страницу до конца, он повторно извлекает последний действительный контент.

т.е. если у меня есть 3 допустимые страницы содержимого, разбитого на страницы,

page / 1 = возвращает страницу содержимого страницы 1/2 = возвращает страницу содержимого страницы 2/3 = возвращает содержимое страницы 3page / 4 = возвращает страницу содержимого страницы 3/4 = возвращает страницу содержимого страницы 3/4 = возвращает страницу содержимого страницы 3/4 = возвращает содержимое страницы 3 и т. д. *

Если я добавлю страницу / 99, топо-прежнему возвращает содержимое страницы 3.

При просмотре в Интернете мне нужно настроить серверную часть так, чтобы она возвращала 404 при попытке вызова страницы, которая не существует.

Iу меня есть 2 проблемы с этим:

1) Сайт моего клиента размещен на SquareSpace.com (они вообще не предоставляют доступ к 404 или очень большой части)

2) Дажеесли бы у меня был доступ, я понятия не имею, как это исправить.

Вот ссылка на статью, объясняющая, что это проблема:

https://github.com/paulirish/infinite-scroll/issues/49

Еслилюбой мог бы помочь, я был бы ОЧЕНЬ благодарен!

1 Ответ

0 голосов
/ 29 марта 2012

Я исправил проблему, добавив счетчик к обратному вызову infinite-scroll следующим образом:

var total = $j(".pagination a:last").html();
var pgCount = 1;
var numPg = total;

    // jQuery InfiniteScroll Plugin.
    container.infinitescroll({
        navSelector  : '.pagination',
        nextSelector : '.pagination a:first',
        itemSelector : '.journal-entry-wrapper',
        animate: true,
        loading: {
            finishedMsg: 'No more content to load.',
            img: 'http://i.imgur.com/6RMhx.gif'
        }
    },
    // Trigger Masonry as a callback.
    function( newElements ) {
        pgCount++;

        if(pgCount == numPg) {
            $j(window).unbind('.infscr');
            container.masonry('reload');
            container.append( newElements ).masonry( 'appended', newElements, true );
            $j('#infscr-loading').find('em').text('No more content to load.');
            $j('#infscr-loading').animate({
                opacity: 1
            }, 200);
            setTimeout(function() {
                $j('#infscr-loading').animate({
                    opacity: 0
                }, 300);
            });
        } else {
            loadPosts(newElements);
        }
    }); 

});

function loadPosts(newElements) {
    // Hide new posts while they are still loading.
    var newElems = $j( newElements ).css({ opacity: 0 });
    // Ensure that images load before adding to masonry layout.
    newElems.imagesLoaded(function() {
        // Show new elements now that they're loaded.
        newElems.animate({ opacity: 1 });
        container.masonry( 'appended', newElems, true );

        // Animate opaque post covers on hover.
        $j(newElems).hover(function() {
            $j(this).find('.postCover').stop(true, true).fadeOut(200);
        }, function() {
            $j(this).find('.postCover').stop(true, true).fadeIn(200);
        });
    });
}
...