Бесконечная прокрутка страницы в Laravel

Бесконечная прокрутка — альтернатива пагинации. Для её реализации я выбрал плагин jScroll. Его можно скачать на одноименном сайте, добавив точку и «com» в строке браузера. Необходима библиотека JQuery.

Основные шаги.
Шаг 1. Подключаем плагин.

<script src="{{ URL::asset('admin/dist/js/jquery.jscroll.js') }}"></script>

Понятное дело, что путь к плагину, скорее всего, у вас будет другой.

Шаг 2. Допустим мы выводим записи на странице. Для этого делаем выборку этих записей, я делаю с сортировкой. Пагинация здесь нужна для того, чтобы а) загрузить первые n-количество записей б) загружать n-количество записей каждый раз, когда прокрутка достигнет последней записи. Я выбираю 10 записей, они загрузятся сразу на страницу, и по 10 будут загружаться при прокрутке вниз.

$posts = Post::orderBy('created_at', 'desc')->paginate(10);

Шаг 3. Выводим записи в шаблоне.

<div class="infinite-scroll">
@foreach($posts as $post)
...
@endforeach
{{ $posts->links()}}
</div>

Главная деталь здесь — скрытая пагинация. Ниже конструкции foreach размещаем блок пагинации строкой {{ $posts->links()}}, а саму HTML конструкцию пагинации надо скрыть, т.к вместо пагинации прокручивать страницы будет плагин JScroll. Панель пагинации скрывается CSS кодом «display:none», либо еще как. Конструкция foreach и пагинация должны быть в конструкции блока с классом infinite-scroll, где прокруткой будет орудовать наш плагин.

Шаг 4. Последний. Код для плагина JScroll.

Здесь указывается — loadingHtml: что будет выводится при загрузке записей, обычно это прелоадер; nextSelector: здесь плагин перебирает страницы пагинации которую мы скрыли; contentSelector: указываем в каком блоке находится пагинация.

$(function () {
            $('.infinite-scroll').jscroll({
                autoTrigger: true,
                loadingHtml: '<img class="center-block" src="/images/loading.gif" alt="Loading..." />',
                padding: 0,
                nextSelector: '.pagination li.active + li a',
                contentSelector: 'div.infinite-scroll',
                callback: function () {
                }
            });
        });

Вам понравиться

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *