Laravel과 jScroll에서 Infinite Scroll을 시도했습니다.

Twitter 등으로 잘 구현되고 있는, 아래로 가면 무한하게 데이터가 읽히는 그.
이번에는 Laravel과 jScroll이라는 jQuery 플러그인을 사용해 보았습니다.



환경


  • Laravel 5.2 (블레이드 사용)
  • jQuery 1.12.4
  • jScroll 2.3.9

  • 코딩



    컨트롤러



    ScrollController.php
    <?php
    
    namespace App\Http\Controllers;
    
    use Illuminate\Http\Request;
    
    use App\Http\Requests;
    use App\Http\Controllers\Controller;
    
    use App\Post;
    
    class PostController extends Controller
    {
    
        public function scroll()
        {
            $post_list = Post::orderBy('post_no')->paginate(15);
    
            return view('scroll', compact('post_list'));
        }
    }
    

    보기



    여기서 미소는 {{$post_list->links()}}$('#infinite-scroll') 안에 확실히 넣어 두지 않으면 동작하지 않는다는 것!
    이것을 실수하고 1시간 정도 도가니에 빠졌기 때문에 주의를. . .

    또한 검색 기능을 추가하는 경우,{{$post_list->appends(['hoge' => $hoge])->links()}}그러면 검색 결과를 이어받을 수 있습니다.

    scrollView.blade.php
    <!DOCTYPE html>
    <html lang="ja">
    <head>
        <meta name="viewport" content="width=device-width">
        <meta charset="UTF-8">
        <title>LaravelとjScrollでInfinite Scrollをやってみた</title>
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/material-design-iconic-font/2.2.0/css/material-design-iconic-font.min.css">
    </head>
    <body>
    <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jscroll/2.3.9/jquery.jscroll.js"></script>
    <script type="text/javascript">
    $(document).ready(function() {
        $('ul.pagination').hide();
        $('#infinite-scroll').jscroll({
            autoTrigger: true,
            loadingHtml: '<div class="col-xs-12 text-center"><i class="zmdi zmdi-spinner zmdi-hc-spin zmdi-hc-3x"></i></div>',
            padding: 0,
            nextSelector: '.pagination li.active + li a',
            contentSelector: '#infinite-scroll',
            callback: function() {
                $('ul.pagination').remove();
            }
        });
    });
    </script>
    
    <div class="container">
        <div id="infinite-scroll">
            <ul>
                @forelse ($post_list as $post)
                    <li>
                        <b>[{{$post->title}}]</b>
                        <br>
                        {{$post->content}}
                    </li>
                @empty
                    <li>投稿はまだありません</li>
                @endforelse
            </ul>
            {{$post_list->links()}}
        </div>
    </div>
    
    </body>
    </html>
    

    소감



    스스로 넣으려고 하면, 조금 귀찮은 처리입니다만, 플러그인으로 여기까지 바삭바삭할 수 있다고는 생각하지 않았습니다.
    컨트롤러는 2 줄로 끝나고 엄청 간단하네요. . .

    일본어의 레퍼런스가 의외로 발견되지 않았으므로, 이번에 써 보았습니다!

    참고문헌


  • Implementing Infinite Scroll Pagination Using Laravel & jScroll
  • jScroll github
  • 좋은 웹페이지 즐겨찾기