スマホでよく見る、画面の横から出てくるメニュー。
ドロワーメニューと言うらしいのだが、それをjQuery+CSSで作ってみる。プラグインなし。
Firefox, Chromeはほぼ問題ないはず。スマホもOK。
ただ、IEは10以上じゃないと動かないと思う。
メインコンテンツは #wrapper
で囲み、その後ろにドロワーメニューとなる部分を #drawer
で囲って配置。
<body> <div id="wrapper"> <header> <span class="drawer-button">開く</span> </header></p> <!-- ここにメインコンテンツ。記事、画像など。 --> </div><!-- /#wrapper --> <div id="drawer"> <header> <span class="drawer-button">閉じる</span> </header> <!-- ここにドロワーの内容。サイトメニューとか。 --> </div><!-- /#drawer --> </body>
メニューの開閉アニメーションには translate3d を使ってある。translateX でも動かせるのだが、3dにしといたほうが、なめらかに動く、らしい。
/* コンテンツが短い場合、オーバーレイが途中で切れるのを防止 */ html, body, #wrapper { height:100%; } /* メインコンテンツ部分 */ #wrapper { position: relative; -webkit-transition: all .2s; transition: all .2s; } #wrapper.open { -webkit-transform: translate3d(-250px, 0, 0); transform: translate3d(-250px, 0, 0); overflow: hidden; } /* ドロワーメニュー部分 */ #drawer { position: fixed; top: 0; right: -250px; width: 250px; height: 100%; overflow-x: hidden; -webkit-overflow-scrolling: touch; -webkit-transition: all .2s; transition: all .2s; background-color: #333; } #drawer.open { -webkit-transform: translate3d(-250px, 0, 0); transform: translate3d(-250px, 0, 0); } /* ドロワーが開いたとき、コンテンツ部分にかけるオーバーレイ */ #overlay { position: absolute; top: 0; left: 0; bottom: 0; right: 0; z-index: 9999; background: rgba(0, 0, 0, .3); } /* 開閉ボタン */ .drawer-button { display: block; float: right; padding: 10px; background-color: #ccc; }
jQuery部分は結構短い。コメント削れば約10行。
基本はボタンをクリックしたときに、#wapper と #drawer にクラスを付ける・外すを切り替えるだけ。
あと、オーバーレイのための要素を追加している。
$(function () { // ドロワーを切り替える関数 var switchDrawer = function () { $('#wrapper, #drawer').toggleClass('open'); //クラスの付け外し if ($('#overlay')[0]) { //overlayの存在確認 $('#overlay').remove(); //あれば削除 } else { $('#wrapper').append('<div id="overlay"></div>'); //なければ追加 } return false; }; // ボタンをクリック・タップしたとき $('.drawer-button').on('touchstart click', switchDrawer); // オーバーレイをクリック・タップしたとき $('#wrapper').on('touchstart click', '#overlay', switchDrawer); });
実行するとこんなかんじ。
左から開くパターンも。
ドロワーメニューをメインコンテンツの前に配置して、アニメーションの方向を逆に。
メニューが開いたとき横スクロールバーが出てしまうので、html,body,#wrapp
に overflow-x: hidden;
を追加。
参考にしたページ↓
コメント
クライアントの要望は1つのプラグインを入れるだけでは帯に短し襷に長しで事足りず、すごい時間をかけてこちらにたどり着きました。
こちらのコードは、シンプルだったので、ほぼjqueryがわからない私でもなんとかアレンジできて助かりました!
デモが見れるのも非常にありがたいです!
人の手をかりずに、作れるようになりたいですが、これからもjqueryに弱い人達の
ためにお力をおかしくださいm(_ _)m
感謝です!
>booska☆
私も同じく、プラグインでは帯に短し襷に長しの状況に直面し、このスクリプトを作りました(笑
あまり気の利いたことのできないスクリプトで、ほぼ自分用のメモのようなつもりではあったのですが、booska☆さんのお役に立てたようで嬉しく思います(^^