2
0

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.

JavaScript 2Advent Calendar 2019

Day 5

[jQuery + php] 簡易ソートアプリ作成してみた(デザイン込)

Last updated at Posted at 2019-12-05

簡易的なアイテムソートできるアプリを実装してみましたので
記録しておきます。

成果物

ファーストビュー
スクリーンショット 2019-12-05 20.13.07.png

ソートビュー
スクリーンショット 2019-12-05 20.13.20.png

コア機能

○フィルターソート機能(jQuery)
|- カテゴリーボタンを押したらカテゴリーのアイテムのみ表示

○一部php化(v5.6)
|- 簡易アプリなのでデータベースは使用なし
|- データベースを利用してもできる形にしているつもりです(問題あったらこちらの記事下にリプください)

データダウンロード

こちらにパッケージ化してありますので、
下記コマンドでクローンし「/php_app/filter_search_php/」のフォルダを
Xamppまたはphpを動かせる場所に入れてください。

$ git clone https://d-mori-570415@bitbucket.org/d-mori-570415/webdesigntemplate.git

jQueryでフィルターソート実装/phpアプリ化

もともと作成していたWebデザインをベースに実装しています。
データはphp上で記述し、データベースは使っていません。
本来はデータベースを作成し、そちらからデータを取るようにしてください。

※コアな部分しか明記しませんので、ダウンロードして見てください。

php
<?php
    /* db設計(Laravelの場合、id、timestampは自動で生成されるので省略)
        * title
        * comment
        * category
        * image
    */
    $listItems = [
        [ 'title'=>'food1', 'comment'=>'これはfood1の画像です', 'category'=>'food', 'image'=>'ph1.jpg' ],
        [ 'title'=>'food2', 'comment'=>'これはfood2の画像です', 'category'=>'food', 'image'=>'ph2.jpg' ],
        [ 'title'=>'view1', 'comment'=>'これはview1の画像です', 'category'=>'view', 'image'=>'ph3.jpg' ],
        [ 'title'=>'view2', 'comment'=>'これはview2の画像です', 'category'=>'view', 'image'=>'ph4.jpg' ],
        [ 'title'=>'sweets1', 'comment'=>'これはsweets1の画像です', 'category'=>'sweets', 'image'=>'ph5.jpg' ],
        [ 'title'=>'sweets2', 'comment'=>'これはsweets2の画像です', 'category'=>'sweets', 'image'=>'ph6.jpg' ],
    ];

    // アイテムの合計数を取得
    $allListItemsCount = count($listItems);
?>

<!DOCTYPE HTML>
<html lang="ja">
<head>
<!--省略-->
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
<script src="./js/jquery.min.js"></script>
<!--省略-->
</head>
<body>
<div class="container">
        <div class="header">
            <ul>
                <li><a href="">Work</a></li>
                <li><a href="">About</a></li>
                <li><a href="">Contact</a></li>
            </ul>
            <div class="logo"><a href="">DesignWorks<span>®️</span></a></div>
        </div>

        <div class="navi">
            <h1>Work: <?= $allListItemsCount; ?></h1>
            <ul class="filter-button">
                <li><a href="" class="allItem">ALL</a></li>
                <li><a href="javascript:void(0)" class="food">FOOD</a></li>
                <li><a href="javascript:void(0)" class="view">VIEW</a></li>
                <li><a href="javascript:void(0)" class="sweets">SWEETS</a></li>
            </ul>
        </div>

        <div class="contents">
            <div class="items filter-list">
                <?php foreach ($listItems as $listItem): ?>
                <div class="item <?= $listItem['category']; ?>">
                    <img src="./img/<?= $listItem['image']; ?>">
                    <a href="">
                        <div class="mask">
                            <div class="caption">
                                <div class="caption-title"><?= $listItem['title']; ?></div>
                                <div class="caption-content"><?= $listItem['comment']; ?></div>
                            </div>
                        </div>
                    </a>
                </div>
                <?php endforeach; ?>
            </div>  
        </div>
        
        <div class="footer">
            <p>Copyright© 2019 Sample Example All rights reserved.</p>
        </div>
    </div>
<script>
          $(function(){
            // filter
            let setFilter = $('.filter-button'),
                filterBtn = setFilter.find('a'),
                setList = $('.filter-list'),
                filterList = setList.find('.item'),
                listWidth = filterList.outerWidth();

            filterBtn.on('click', function(){
                if(!($(this).hasClass('active'))){
                    let filterClass = $(this).attr('class');
                    filterList.each(function(){
                        if($(this).hasClass(filterClass)){
                            $(this).css({ display: 'block' })
                                .stop().animate({ width: listWidth }, 100);
                            $(this).find('*').stop().animate({ opacity: '1' }, 100);
                        } else {
                            $(this).find('*').stop().animate({ opacity: '0' }, 100);
                            $(this).stop().animate({ width: '0' }, 100, function(){
                                $(this).css({ display: 'none' });
                            });
                        }
                    });
                    filterBtn.removeClass('active');
                    $(this).addClass('active');
                }
            });
          });
</script>
</body>
</html>
2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?