jQueryを使ったイメージメニューのチュートリアル
jQueryを使った、選択すると滑らかに展開する画像を使ったメニューの作り方です。

こちらの記事では、メニューにカーソルを乗せると選択したメニューの画像が横に広がって見せるタイプ1と、メニューにカーソルを乗せると選択したメニュー以外のメニューが縮小されて、選択したメニュー画像を大きく見せるタイプ2の作り方が紹介されています。
demo
タイプ1のデモ:Jquery Image Menu Example 1
タイプ2のデモ:JQuery Image Menu Example 2
デモのファイルもこちらの記事からダウンロードできます。
タイプ1のメニューの作り方
リスト形式のメニューをhtmlで作ります。
<div class="jimgMenu">
<ul>
<li class="landscapes"><a href="#">Landscapes</a></li>
<li class="people"><a href="#">People</a></li>
<li class="nature"><a href="#">Nature</a></li>
<li class="abstract"><a href="#">Abstract</a></li>
<li class="urban"><a href="#">Urban</a></li>
</ul>
</div>
CSSはfroatでliを横並びにして、メニューにしたい画像をliの背景に指定します。liのテキスト部分は-1000pxなどとし画面に表示されないように指定します。一番最後のメニューのクラスにmin-widthで最初に見せておく横幅を指定します。ulの横幅に展開した場合の横サイズを指定して、overflow: hiddenを指定し展開した時にメニュー全体の横幅が大きくならない様にします。
※CSSの詳しいコードは元記事をご参照下さい。
スライドのアニメーションにjQuery Easing Pluginを使用します。(ダウンロードできるファイル内にも入っています。)
htmlのヘッド内でjQuery本体とCSSとjQueryプラグインを下記のように読み込みます。
<link href="css/jimgMenu.css" rel="stylesheet" type="text/css" /> <script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript" src="js/jquery-easing-1.3.pack.js"></script> <script type="text/javascript" src="js/jquery-easing-compatibility.1.2.pack.js"></script>
続けてヘッド内で下記のコードを読み込みます。
スムースするアニメーションはeasing:”easeOutQuad”の箇所で指定を変更する事ができます。指定できるアニメーションとサンプルは”jQuery Easing – jQuery 日本語リファレンス”で確認できます。
<script type="text/javascript">
$(document).ready(function () {
// find the elements to be eased and hook the hover event
$('div.jimgMenu ul li a').hover(function() {
//↑'div.jimgMenu ul li a'にメニューの要素名を指定
// if the element is currently being animated
if ($(this).is(':animated')) {
$(this).stop().animate({width: "310px"}, {duration: 450, easing:"easeOutQuad", complete: "callback"});
//width: "310px"の箇所でホバー時に開く横幅を指定
//duration: 450の箇所ではスムースするスピードを指定
} else {
// ease in quickly
$(this).stop().animate({width: "310px"}, {duration: 400, easing:"easeOutQuad", complete: "callback"});
}
}, function () {
// on hovering out, ease the element out
if ($(this).is(':animated')) {
$(this).stop().animate({width: "78px"}, {duration: 400, easing:"easeInOutQuad", complete: "callback"})
//width: "310px"の箇所でマウスアウト時の横幅を指定
//duration: 400の箇所ではスムースするスピードを指定
} else {
// ease out slowly
$(this).stop(':animated').animate({width: "78px"}, {duration: 450, easing:"easeInOutQuad", complete: "callback"});
}
});
});
</script>
作ってみたサンプル
作ってみたサンプルのデモ→Jquery Image Menu|memocarilog demo
サンプルのhead部分
<link href="example.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/jquery-easing-1.3.pack.js"></script>
<script type="text/javascript" src="js/jquery-easing-compatibility.1.2.pack.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$('div.jimgMenu ul li a').hover(function() {
if ($(this).is(':animated')) {
$(this).stop().animate({width: "400px"}, {duration: 850, easing:"easeOutExpo"});
} else {
$(this).stop().animate({width: "400px"}, {duration: 800, easing:"easeOutExpo"});
}
}, function () {
if ($(this).is(':animated')) {
$(this).stop().animate({width: "130px"}, {duration: 800, easing:"easeOutExpo"})
} else {
$(this).stop('animated:').animate({width: "130px"}, {duration: 850, easing:"easeOutExpo"});
}
});
});
</script>
サンプルのbody部分
<body>
<div class="jimgMenu">
<ul>
<li class="book"><a href="#">book</a></li>
<li class="cup"><a href="#">cup</a></li>
<li class="flower"><a href="#">flower</a></li>
<li class="neko"><a href="#">neko</a></li>
</ul>
</div>
</body>
サンプルのcss部分
body {
margin:0;
padding:0;
color: #333;
}
.jimgMenu {
position: relative;
width: 870px;
height: 290px;
overflow: hidden;
margin: 25px 0px 0px;
}
.jimgMenu ul {
list-style: none;
margin: 0px;
display: block;
height: 290px;
width: 1340px;
}
.jimgMenu ul li {
float: left;
}
.jimgMenu ul li a {
text-indent: -1000px;
border-right: 2px solid #fff;
display:block;
overflow:hidden;
width:130px;
height: 290px;
}
.jimgMenu ul li.book a {
background: url(image/books.jpg) no-repeat ;
}
.jimgMenu ul li.cup a {
background: url(image/cup.jpg) no-repeat ;
}
.jimgMenu ul li.flower a {
background: url(image/flower.jpg) no-repeat ;
}
.jimgMenu ul li.neko a {
background: url(image/neko.jpg) repeat scroll 0%;
min-width:400px;
}
No Comments & Tracbacks