[JS]カードやリストをアニメーションで移動できるレスポンシブ対応のグリッドを実装するスクリプト -Muuri
Post on:2017年12月5日
レンガ状のカードやリスト状のパネルをドラッグ&ドロップで移動したり、フィルタリングやソートも可能なレスポンシブ対応のグリッドを簡単に実装できるスクリプトを紹介します。通常だと複数のライブラリを組み合わせないと実装できませんが、これ一つで軽量に実装できます。
Muuriとは「壁(Wall)」を意味するフィンランド語だそうです。

Muuriの特徴
- レスポンシブ対応
- レイアウトのカスタマイズは自由自在
- パネルのドラッグ&ドロップに対応
- ネストされたグリッドに対応
- 高速で快適なアニメーション
- フィルタリングやソート機能を装備
- IE9+もサポート
- MITライセンス
Muuriのデモ
デモでは、Muuriのさまざまなレイアウトを実際に楽しめます。
Gridのデモは、Masonryのようなグリッドレイアウトです。

デモ: Grid
各パネルのドラッグ&ドロップ、フィルタリングやソート機能を備えており、軽快なアニメーションでレイアウトを楽しめます。

デモのアニメーション
レスポンシブにも対応しています。

デモを幅900pxで表示
Kanbanは看板でしょうか。

デモ: Kanban
各アイテムのパネルをドラッグ&ドロップで自由に並べ替えできます。

デモのアニメーション
Muuriの使い方
Step 1 :外部ファイル
当スクリプトを外部ファイルとして記述します。
CDNでも配信されています。
1 2 3 4 5 6 |
<body> ... コンテンツ ... <script src="https://cdnjs.cloudflare.com/ajax/libs/muuri/0.5.1/muuri.min.js"></script> </body> |
MuuriのアニメーションはWeb Animations APIを使用しており、サポートされていないブラウザで使用する場合はポリフィル用のスクリプトを使用します。
1 2 3 |
<script src="web-animations.min.js"></script> <script src="hammer.min.js"></script> <script src="muuri.min.js"></script> |
Step 2: HTML
すべてのグリッドにコンテナ要素が必要となります。グリッドのアイテムは入れ子で実装し、外側は配置のために、内側はアニメーションのために使用されます。内側には任意の要素を配置することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<div class="grid"> <div class="item"> <div class="item-content"> <!-- Safe zone, enter your custom markup --> This can be anything. <!-- Safe zone ends --> </div> </div> <div class="item"> <div class="item-content"> <!-- Safe zone, enter your custom markup --> <div class="my-custom-content"> Yippee! </div> <!-- Safe zone ends --> </div> </div> </div> |
Step 3: CSS
コンテナには「position: relative;」を、各アイテムには「position: absolute;」を指定します。サイズやカラーには特に制限はありません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
.grid { position: relative; } .item { display: block; position: absolute; width: 100px; height: 100px; margin: 5px; z-index: 1; background: #000; color: #fff; } .item.muuri-item-dragging { z-index: 3; } .item.muuri-item-releasing { z-index: 2; } .item.muuri-item-hidden { z-index: 0; } .item-content { position: relative; width: 100%; height: 100%; } |
Step 4: JavaScript
コンテナを指定し、スクリプトを初期化します。
1 |
var grid = new Muuri('.grid'); |
sponsors