8
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

今回のお題

以前、このような記事を書きました。
cakePHPのpaginateでinfinite scrollを使った無限スクロール

スピンオフではありませんが、
Laravelでも同じようなことを実装することになりましたので
ぐるぐると備忘録として残していきます。

こういうのは別の技術を使うのも一つの手ではありますが
JSはあえて同じものを使おうと思います。
決して手抜きではない。

Controller

UserContoroller.php
$users = User::getUserByName($nane)->paginate($pageCount);

return view('user.index', compact('users'));

こんな感じでLaravel標準のpaginationで取得するのはCakePHPと変わらないですね。

View(Blade)

resourse/views/user/index.blade.php
<div class="search_result">
    <div class="result_users">
        <p class="number">{{ $users->total() }}</p>

        @foreach($users as $user)
            @component('layouts.user.list', ['user' => $user])@endcomponent
        @endforeach
        
        @if ($users->hasMorePages())
        <p class="button more"><a href="{{ $users->nextPageUrl() }}">もっと見る</a></p>
        @endif
    </div>
</div>

componentはユーザー情報を表示する共通レイアウトと考えていただけたらと。
「もっと見る」ボタンは初期表示時に次のページがないときは表示されません。

javaScript


<script src="/js/jquery.infinitescroll.min.js"></script>
<script type="text/javascript">
    var pageCount = {{ $users->lastPage() }};
    var nowPage = 1;
    $('.result_users').infinitescroll({
        navSelector  : ".more",
        nextSelector : ".more a",
        itemSelector : ".info",
        loading : {
            img : '',
            msgText : 'Now loading....',
            finishedMsg : '',
        },
    },
    function(newElements) {
        var $newElems = $(newElements);
        $("#infscr-loading").remove();
        if (nowPage < pageCount) {
            $(".more").appendTo(".result_users");  
            $(".more").css({display: 'block'});  
        }
        nowPage++;
    });
    
    // クリックでスクロールさせるためinfinitescrollをunbind
    $('.result_users').infinitescroll('unbind');
    // クリック時の動作
    $('.more a').click(function(){
        $('.result_users').infinitescroll('retrieve');
        return false;
    });
</script>

itemSelectorにある.infoは表示するユーザー情報の大枠がそうなっている、
とお考えください。

今回も無限スクロールと言いながら、「もっと見る」をクリックして続きを表示されるようにしています。
ノークリックでスクロールしたら次が表示されるようにするには
// クリックでスクロールさせるためinfinitescrollをunbind
以下のスクリプトを削除すれば実現できるはずです。

8
20
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
8
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?