Slideout.jsを使用したjavascript単体で動作するドロワーメニューを実装してみましょう!
Slideout.jsを使えばシンプルなコードでjQueryに依存しないスライドアニメーションのドロワーメニューが実装可能です!
とてもなめらかな動きかつ軽量なので使いやすさ◎です。
今回のデモではハンバーガーメニューアイコンとアニメーションも
CSSと数行のjavascriptだけで実装しているので合わせてご紹介いたします♪
Slideout.jsの使い方
まずはSlideout.jsからSlideout.jsのファイル一式をDLします。
DLしたファイルの中の
- index.css
- slideout.min.js
は外部リンクを貼って利用します。
以下のコードをドロワーメニューを実装したいhtmlファイルに記述します。
▼HTML
<head> ... <link rel="stylesheet" href="index.css"> </head> <body> ... <script src="dist/slideout.min.js"></script> </body>
次に、ナビゲーション(#menu)とコンテンツ(#panel)の記述をします。
※idは任意の文字列に変更可能です。
▼HTML
<nav id="menu"> <h2>Menu</h2> <ul> <li>menu1</li> <li>menu2</li> <li>menu3</li> </ul> </nav> <main id="panel"> <header> <div class="toggle-button menuWrapper"> <a href="#menu" id="menuButton"><span>MENU</span></a> </div> </header> </main>
続いて、JavaScriptのオプションを指定します。
簡単な設定はSlideout.jsのFAQにコードとともに記載があるため、興味がある方はカスタマイズも是非試してみてくださいね。
▼JavaScript
<script> var slideout = new Slideout({ 'panel': document.getElementById('panel'), 'menu': document.getElementById('menu'), 'padding': 256, 'tolerance': 70 }); // Toggle button document.querySelector('.toggle-button').addEventListener('click', function() { slideout.toggle(); }); </script>
Slideout.jsでドロワーメニューを実装する設定は以上です。
今回のデモではハンバーガーボタンのアニメーション用にCSSとJavaScriptを使用しています。
合わせて設定してみてくださいね。
▼CSS
/*ハンバーガーメニューアイコン*/ .menuWrapper { position: relative; z-index: 0; border: 0; width: 50px; height: 50px; } #menuButton { overflow: hidden; display: block; position: relative; z-index: 0; width: 50px; height: 50px; cursor: pointer; } #menuButton span, #menuButton::before, #menuButton::after { display: block; position: absolute; top: 0; bottom: 0; left: 0; right: 0; width: 36px; height: 4px; margin: auto; background: #000; } #menuButton span { overflow: hidden; z-index: 1; color: #000; } #menuButton::before { z-index: 2; transform: translate(0, -12px); content: ""; } #menuButton::after { z-index: 2; transform: translate(0, 12px); content: ""; } /*アニメーション*/ #menuButton span { transition: transform 150ms 50ms; } #menuButton::before, #menuButton::after { transition: transform 200ms; } #menuButton.active span { transform: translate(-50px, 0); transition: transform 150ms; } #menuButton.active::before { transform: rotate(45deg); } #menuButton.active::after { transform: rotate(-45deg); }
▼JavaScript
<script> document.addEventListener('DOMContentLoaded', function() { document.getElementById('menuButton').addEventListener('click', function(ev) { ev.preventDefault(); this.classList.toggle('active'); }); }); </script>
今回、参考にさせていただいたのは、
『Slideout.js』
『コリス』
『Qiita』
です。
ありがとうございます♪