Home » jQuery 應用

[jQ]用 jQuery 做選單 – 翻選式選單

範例 1
範例 2
範例 3
沒錯!只要 500 元就能獲得我們團隊完整的協助,讓效果能迅速的整合到您的網站,並保證瀏覽器的相容性。
立刻申請!

筆者有介紹過一個 Background-Position Animation Plugin,它讓 jQuery.animate 能支援原本所不支援的 background-position 屬性。所以我們就能使用它來做到更多有趣的動畫效果,像這次要教的翻選式選單也是玩玩 background-position 屬性的。

選單的部份筆者是用 ul 來做的:

1
2
3
4
5
6
7
8
9
10
11
<body>
	<h3>水平選單(圖片是垂直)</h3>
	<ul id="hmenu">
		<li><a href="#" class="v1">男丁</a></li>
		<li><a href="#" class="v2">jQuery</a></li>
		<li><a href="#" class="v3">小神童</a></li>
		<li><a href="#" class="v4">蠟筆小新</a></li>
	</ul>
 
	<br class="clear" />
</body>

在看 CSS 設定之前先來看一下選單的背景圖片

v3

圖片雖然有上下兩排,但一開始我們只要讓它顯示上半部,當滑鼠移到選單時再切換到顯示下半部,讓整個動作有""的感覺。CSS 這邊就配合 li 裡面的連結而加上不同的背景圖片;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#hmenu {
	margin: 0;
	padding: 0;
	list-style: none;
}
#hmenu li {
	float: left;
	padding: 0 5px;
}
#hmenu li a {
	display: block;
	height: 16px; /* 圖片的高/2 */
	line-height: 16px;	/* ie suck */
	text-indent: -9999px;
}
#hmenu a.v1 {
	width:68px; /* 圖片的寬 */
	background:url(v1.gif) no-repeat 0 0;	
}
#hmenu a.v2 {
	width:67px; /* 圖片的寬 */
	background:url(v2.gif) no-repeat 0 0;	
}	
#hmenu a.v3 {
	width:67px; /* 圖片的寬 */
	background:url(v3.gif) no-repeat 0 0;	
}
#hmenu a.v4 {
	width: 67px; /* 圖片的寬 */
	background:url(v4.gif) no-repeat 0 0;	
}

比較麻煩的是在 IE 6 中,若超連結沒設 line-height 的話,整個超連結的 height 會超出限制範圍,因此要記得加上 line-height 喔!

做到這邊就已經有個基本的雛型了,接下來就請出我們的 jQuery.animate 來做動畫效果囉:

檢視原始碼 JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$(function(){
	// 幫 #hmenu li a 加上 hover 事件
	$("#hmenu li a").hover(function(){
		// 滑鼠移進選項時..
		// 把背景圖片的位置往上移動
		var _this = $(this),
			_height = _this.height() * -1;
		_this.stop().animate({
			backgroundPosition: "0px " + _height + "px"
		}, 200);
	}, function(){
		// 滑鼠移出選項時..
		// 把背景圖片的位置移回原位
		$(this).stop().animate({
			backgroundPosition: "0px 0px"
		}, 200);
	});
});

這邊用到的也是很基本的 animate 而已,只是記得要引用 Background-Position Animation Plugin 才行喔。

最後我們就能來看效果哩,試著把滑鼠移到選項上面看看:

jquery-flipping-menu-1

我們的選項就會往上翻轉吧,若是要往下翻轉的話,那麼就要改一開始的 background-position 及移動的位置就可以了。這題目就當成是作業讓各位自行去練習吧!

現在除了上下翻轉之外,筆者再弄個左右翻轉的範例,因為是左右的關係,所以圖片就要變化一下樣式:

h3

當然 CSSjQuery 也需要配合修改一下,整個範例語法為:

檢視原始碼 JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<style type="text/css">
	#vmenu {
		margin: 0;
		padding: 0;
		list-style: none;
	}
	#vmenu li {
		padding: 5px 0;
	}
	#vmenu li a {
		display: block;
		height: 18px; /* 圖片的高 */
		line-height: 18px;	/* ie suck */
		text-indent: -9999px;
	}
	#vmenu a.h1 {
		width:40px; /* 圖片的寬/2 */
		background:url(h1.gif) no-repeat 0 0;	
	}
	#vmenu a.h2 {
		width:58px; /* 圖片的寬/2 */
		background:url(h2.gif) no-repeat 0 0;	
	}	
	#vmenu a.h3 {
		width:58px; /* 圖片的寬/2 */
		background:url(h3.gif) no-repeat 0 0;	
	}
	#vmenu a.h4 {
		width:82px; /* 圖片的寬/2 */
		background:url(h4.gif) no-repeat 0 0;	
	}
</style>
<script type="text/javascript">
	$(function(){
		// 幫 #hmenu li a 加上 hover 事件
		$("#vmenu li a").hover(function(){
			// 滑鼠移進選項時..
			// 把背景圖片的位置往左移動
			var _this = $(this),
				_width = _this.width() * -1;
			_this.stop().animate({
				backgroundPosition: _width + "px 0"
			}, 200);
		}, function(){
			// 滑鼠移出選項時..
			// 把背景圖片的位置移回原位
			$(this).stop().animate({
				backgroundPosition: "0 0"
			}, 200);
		});
	});
</script>
 
<body>
	<h3>垂直選單(圖片是水平)</h3>
	<ul id="vmenu">
		<li><a href="#" class="h1">男丁</a></li>
		<li><a href="#" class="h2">jQuery</a></li>
		<li><a href="#" class="h3">小神童</a></li>
		<li><a href="#" class="h4">蠟筆小新</a></li>
	</ul>
</body>

瀏覽後的效果就是改成水平的翻轉:

jquery-flipping-menu-2

這樣的選單效果是不是很有趣呢?!如果再將選單做整體設計的話,那效果並不會比 Flash 差到那唷。

範例 1 範例 2 範例 3 範例 4 範例 5

檔案描述
基本的範例檔案(免空) 開始下載
基本的範例檔案 會員限定

也許您對這些文章也有興趣

  • [jQ]用 jQuery 做選單 – 彈起式頁籤選單
  • [jQ]用 jQuery 做選單 – 動畫賀聯式選單
  • [jQ]用 jQuery 做選單 – 水平雙層子選單
  • [jQ]用 jQuery 做選單 – 橫向 Accordion 式選單
  • [jQ]用 jQuery 做選單 – 山寨版的 HTC 首頁選單
  • [jQ]jQuery Approach 1.01

29 筆針對 [jQ]用 jQuery 做選單 – 翻選式選單 的迴響

  1. 請問如果我想把圖片翻轉的部分,改成文字,都用程式去控制以便管理方便,這部分該怎麼改好?
    有試過background-color /以及文字h1/h2等,好像都顯示不出來
    謝謝

  2. 老師你好,我試過了兩種方式

    AA

    AA

    都只出現背景翻轉,但字一樣保留在原位,有試過修改js,似乎都一樣,想請問我哪一步想錯了嗎?
    不好意思一直打擾您,謝謝

    • 你..你覺得這樣的字要怎樣做出像原本背景移動的方式呢XD
      且若可以的話, 把你要的效果弄個圖片説明一下, 這樣我才比較好懂你是要什麼

    • 留言時的特殊語法都會被過濾掉, 未來會提供其它方式讓留言者張貼程式碼。
      信已收到且回覆囉~

  3. 老師您好~
    想請問這個http://livedemo00.template-help.com/prestashop_34921/網站的按鈕該怎麼做
    我照著您的這篇文章做了一晚上
    發現好像不是他用的效果呢= ="""

  4. 男丁老師您好,之前從您這邊學了幾個Java語法,應用起來很棒,很感謝您的教學分享。只是今天發現之前製作的翻轉式選單突然失效了?而且不僅是我自己做的,連從您這邊下載回去的範例檔案、還有直接在這邊看的範例連結都失效了,讓我滿頭霧水,想請教一下這是什麼原因,我要怎麼修正這個問題呢?

  5. 男丁老師您好,您分享的jQuery都讓我受益不少,幫了非常大的忙,非常感謝您。我在網站include翻選式選單後,在網站首頁是正常翻選狀態,但按了選項連結後就不再是動態翻選了,請問我該如何修正呢?

發表迴響