HTML
HTMLはナビゲーションを開くためのボタン(#nav-toggle)とナビゲーション本体(#side-nav)を作成します。
HTML
<div id="nav-toggle"> <span></span> <span></span> <span></span> </div> <nav id="side-nav"> <ul id="side-nav-btn"> <li><a href="#">Home</a></li> <li><a href="#">About</a></li> <li><a href="#">Business</a></li> <li><a href="#">Result</a></li> <li><a href="#">Contact</a></li> </ul> </nav> <article> ... </article>
CSS
あまり関係な部分は省略しているCSS部分です。
widthを設定してrightでその分だけマイナスにすることで、初期配置は画面外になるようにしてます。
CSS
#side-nav { color: #fff; background: #0b8793; position: fixed; z-index: 1000; width: 400px; height: 100%; right: -400px; top: 0; padding: 20px; } #side-nav-btn { position: absolute; left: 400px; }
JavaScript
dynamics.jsの他に、DOM的な事やイベント的な事にjQueryも使用しています。
ボタンの数だけdelayを少しずつ大きくすればバラバラな動きになります。
typeにdynamics.springを指定することでバウンドしたような動きになり、いい感じにしてくれます。
JavaScript
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/dynamics.js/1.0.0/dynamics.min.js"></script> <script> (function($) { $(function() { var $sideNav = $('#side-nav')[0]; var $sideNavBtns = $('#side-nav-btn li'); $('#nav-toggle').on('click',function(){ if ($('body').hasClass('nav-open')) { $('body').removeClass('nav-open'); dynamics.animate($sideNav, { translateX: 0 }, { duration: 200, delay: 150 }); for(var i=0; i<$sideNavBtns.length; i++) { dynamics.animate($sideNavBtns[i], { translateX: 0 }, { type: dynamics.spring, duration: 2000, friction: 400, delay: i * 50 }) } } else { $('body').addClass('nav-open'); dynamics.animate($sideNav, { translateX: -180 }, { type: dynamics.spring, duration: 800 }); for(var i=0; i<$sideNavBtns.length; i++) { dynamics.animate($sideNavBtns[i], { translateX: -360 }, { type: dynamics.spring, duration: 1000, friction: 400, delay: (i * 150) + 200 }) } } }); }); })(jQuery); </script>