LoginSignup
31
26

More than 5 years have passed since last update.

LaravelとjScrollで、Infinite Scrollをやってみた

Last updated at Posted at 2017-09-18

Twitterなどでよく実装されている、下にいくと無限にデータが読み込まれるアレ。
今回はLaravelとjScrollというjQueryのプラグインを使ってやってみました。

infinite-scroll.gif

環境

  • Laravel 5.2(Blade利用)
  • jQuery 1.12.4
  • jScroll 2.3.9

コーディング

Controller

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'));
    }
}

View

ここでのミソは{{$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行で済んでますし、めちゃめちゃ簡単ですね。。。

日本語のリファレンスが意外と見つからなかったので、今回書いてみました!

参考文献

31
26
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
26