毎度おなじみ、[怖くないJavaScript + jQuery]シリーズです。
今回は画面サイドにくっついてくる、折りたためるサイドメニューを作りました。
デモ
実際に動かしてみるとこんな感じになります。デモを別ページで開く
ファイル一式ダウンロード
各要素のid、メニューの横幅、ボタンの中身、アニメーションの速さがそれぞれ変更できます。
そのままでもお使い頂くこともできますが、下記に動作の解説です。
Step1:まず下準備
こちらはいつもと同じですね。まず必要なファイルを読み込みます。headerの中に、jQueryと、自分で作ったjavascriptのファイル(今回は sidemenu.js とします)を読み込みます。
<script src="common/js/jquery.js" type="text/javascript"></script>
<script src="common/js/sidemenu.js" type="text/javascript"></script>
</head>
Step2:次にHTMLの準備
今回は1つのdivに2つdivを入れ子にしてください。それぞれにidを振ります。囲んでいるdiv(id=”menu_wrap“)と、開閉するdiv(id=”sidemenu“)と、キーになるボタンのdiv(id=”sidemenu_key“)ですね。
横幅を指定して、「position:fixed;」「top:0;」「left:-150px;」とleftの値をマイナスに設定して画面外に配置してください。
jsで、ボタンをクリックした時にleftの値を操作してアニメーションさせます。
Step3:jsを書き込む
headerで読み込んでいる sidemenu.js の初期設定をHTMLソースに合わせて変更してください。色の違う箇所を変更してくださいね。//***********************************
/* ▼ここから初期設定 */
// 1. メニューを囲んでるdivのid
var menuWrap = ‘#menu_wrap‘
// 2.ボタンクリック時に現れる領域のid
var sideMenu = ‘#sidemenu‘
// 3.ボタンのid
var sidemenKey = ‘#sidemenu_key‘
// 4.メニューの横幅(px)
var menuWidth = ‘150‘
// 5.メニューが閉じてる時のボタンの中身(textでも画像でも可)
var closeHtml = ‘→‘
// 6.メニューが開いてる時のボタンの中身(textでも画像でも可)
var openHtml = ‘←‘
// 7.開閉アニメーションの速さ(単位ミリ秒)
var speed = 300
//***********************************
jsの解説
//***********************************
/* ▼ここから初期設定 */
// 1. メニューを囲んでるdivのid
var menuWrap = ‘#menu_wrap‘
// 2.ボタンクリック時に現れる領域のid
var sideMenu = ‘#sidemenu‘
// 3.ボタンのid
var sidemenKey = ‘#sidemenu_key‘
// 4.メニューの横幅(px)
var menuWidth = ‘150‘
// 5.メニューが閉じてる時のボタンの中身(textでも画像でも可)
var closeHtml = ‘→‘
// 6.メニューが開いてる時のボタンの中身(textでも画像でも可)
var openHtml = ‘←‘
// 7.開閉アニメーションの速さ(単位ミリ秒)
var speed = 300
//***********************************
//▼ボタンをクリックしたらメニューが開いたり閉じたりする処理
$(sidemenKey).click(function(){
/**************************/
//▼menuの高さをウィンドウの高さ100%に設定する処理(不要な場合は削除)
//変数windowHeightに画面の高さを取得、変数windowHeightに格納
var windowHeight = $(window).height();
//sideMenuのheightをwindowHeightにする
$(sideMenu).height(windowHeight);
//画面をリサイズした時、heightを読み直しする処理
var timer = false;
$(window).resize(function() {
/**************************/
});