Home » jQuery 應用

[jQ]用 jQuery 做頁籤 – 水平滑動式頁籤

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

現在單純切換式的頁籤已經很普遍的使用在網頁中,很多人也許都看到無感了。所以筆者今天要介紹另一種有別一般水平滑動切換方式的頁籤,讓您的頁籤就是跟別人不一樣。

首先不可少的 HTML

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
<body>
	<div id="abgne-block-20120327">
		<ul class="tabs">
			<li><span>Happy Birthday</span></li>
			<li><span>Calculator Widget</span></li>
			<li><span>My Card</span></li>
		</ul>
		<div class="tab_container">
			<ul class="tab_content">
				<li>
					<img src="images/Happy_Birthday.png" alt="Happy Birthday">
					<h3>Happy Birthday</h3>
					<p>是否曾經因太忙碌而錯過好友的生日呢?此軟體能依日期列出全部含有生日設定的聯絡人清單,讓您快速掌握下一位生日的聯絡人。</p>
				</li>
				<li>
					<img src="images/Calculator_Widget.png" alt="Calculator Widget">
					<h3>Calculator Widget</h3>
					<p>是否常常想用計算機時都得要在一堆程式中尋找呢?「Calculator Widget」是一個可以把計算機放在桌面上的小工具程式,讓您可以直接立即使用並計算。</p>
				</li>
				<li>
					<img src="images/My_Card.png" alt="My Card">
					<h3>My Card</h3>
					<p>My Card 是一個簡單直覺使用的程式,可以讓您把各種有條碼(BarCode)的卡片建檔管理,並提供條碼小工具可直接放在桌面上。</p>
				</li>
			</ul>
		</div>
	</div>
</body>

整個排版跟在利用 jQuery 來製作網頁頁籤(Tab)很像但又不太一樣,主要是頁籤的部份並不使用錨點的方式,同時內容區塊的部份也都改用 ul li 來陳列。

接著直接套上 CSS

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
#abgne-block-20120327 {
	width: 640px;
}
#abgne-block-20120327 ul, #abgne-block-20120327 li {
	list-style: none;
	margin: 0;
	padding: 0;
}
#abgne-block-20120327 .tabs li {
	float: left;
	margin: 0 0 -1px 5px;
	border: 1px solid #ddd;
	background: #fafafa;
	height: 32px;
	cursor: pointer;
	border-radius: 5px 5px 0 0;
}
#abgne-block-20120327 .tabs li.active {
	background: #fff;
	padding-bottom: 1px;
	border-bottom: none;
}
#abgne-block-20120327 .tabs li.hover{
	background: #f5f5f5; 
}
#abgne-block-20120327 .tabs span {
	display: block;
	float: left;
	overflow: hidden;
	padding: 7px 15px 5px 15px;
}
#abgne-block-20120327 .tab_container {
	clear: both;
	border: 1px solid #DDD;
	background: #fff;
	overflow: hidden;
	border-radius: 5px;
}
#abgne-block-20120327 .tab_container ul {
	position: relative;
	height: 150px;
	overflow: hidden;
}
#abgne-block-20120327 .tab_container .tab_content li {
	position: absolute;
	width: 610px;
	height: 100%;
	padding: 15px;
	margin-top: 10px;
	background: #fff;
}
#abgne-block-20120327 .tab_container .tab_content li img {
	display: block;
	float: left;
	margin-right: 15px;
}
#abgne-block-20120327 .tab_container .tab_content li h3 {
	font-size: 22px;
	line-height: 22px;
	margin: 5px 0 15px;
}

若沒什麼問題的話,就能看到基本樣式哩~

再來水平滑動的部份就靠 jQuery 囉:

檢視原始碼 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
$(function(){
	// 預設顯示第一個頁籤
	// 並先把 .tabs, .tabs li 及 .tab_content, .tab_content li 等元素取出
	// 同時也要取得 .tab_content 的寬
	var _default = 0, 
		$block = $('#abgne-block-20120327'), 
		$tabs = $block.find('.tabs'), 
		$tabsLi = $tabs.find('li'), 
		$tab_content = $block.find('.tab_content'), 
		$tab_contentLi = $tab_content.find('li'), 
		_width = $tab_content.width();
 
	// 當滑鼠移到 .tabs li 上時要套用 .hover 樣式
	// 移出時要移除 .hover 樣式
	$tabsLi.hover(function(){
		var $this = $(this);
 
		// 若被滑鼠移上去的 li 是目前顯示的頁籤就不做任何動作
		if($this.hasClass('active')) return;
 
		$this.toggleClass('hover');
	}).click(function(){	// 當滑鼠點擊 .tabs li 時
		// 先取出被點擊及目前顯示的頁籤與索引
		var $active = $tabsLi.filter('.active').removeClass('active'), 
			_activeIndex = $active.index(),  
			$this = $(this).addClass('active').removeClass('hover'), 
			_index = $this.index(), 
			isNext = _index > _activeIndex;
 
		// 如果被點擊的頁籤就是目前已顯示的頁籤, 則不做任何動作
		if(_activeIndex == _index) return;
 
		// 依索引大或小來決定移動的位置
		$tab_contentLi.eq(_activeIndex).stop().animate({
			left: isNext ? -_width : _width
		}).end().eq(_index).css('left', isNext ? _width : -_width).stop().animate({
			left: 0
		});
	});
 
	// 先把預設要顯示的頁籤加上 .active 樣式及顯示相對應的內容
	$tabsLi.eq(_default).addClass('active');
	$tab_contentLi.eq(_default).siblings().css({
		left: _width
	});
});

滑動的部份是此範例較特別的地方,在依索引大或小來決定移動的位置時,不管是從第幾個頁籤跳到第幾個頁籤,一次就只換滑動一張就到達定位。


範例 1 範例 2

檔案描述
基本的範例檔案(免空) 開始下載
基本的範例檔案 會員限定
加上自動輪播功能 會員限定

40 筆針對 [jQ]用 jQuery 做頁籤 – 水平滑動式頁籤 的迴響

  1. 男丁老師:針對有些網站,可以在手持裝置的瀏覽器上,使用手指頭滑動圖文區塊
    這個效果應該朝什麼方向(或外掛?)去找呢? EX: 台灣YAHOO奇摩,就可以在手機上面用手指頭滑動內容

          • 男丁老師你好
            1.我把那兩支結合,但我用非常陽春方式,可以請問怎樣寫才會比較乾淨呢(關於分頁那兩支)

            2.若無放在這分頁時,都正常,但放分頁時,我若點選tab2的圖時,但點選回tabl時還是會停留在tab2的大圖(這關於切圖縮換)

            http://www.arkdesign.co.jp/test/test05.htm

            可以請男丁老師幫我看看嗎??

          • 1.要改頁籤的程式改成外掛版才會比較方便。不過文章中的最下面那段程式就是給多組頁籤用的了~
            2.在你第一個頁籤做完切換的最後, 加上

            檢視原始碼 JavaScript
            1
            
            $('.cab_content').eq(_index).find('.album a').eq(0).mouseover();
          • 請問男丁老師,我這樣加可是也不對,cab1和cab2都會直接show出,請問我該如何修改

            $('.tab_content').eq(_index).stop(false, true).fadeIn().siblings().hide();
            $('.cab_content').eq(_index).find('.album a').eq(0).mouseover();

            http://www.arkdesign.co.jp/test/test.rar

          • 檔案不存在了, 我記得回你時有試過應該是可以的~

        • 男丁老師,抱歉,我放錯檔名了http://www.arkdesign.co.jp/test/test.rar

          它是可以同時show tab和cab,但會變成cab1和cab2同時出現,且點tab1或tab2時,cab1,2都會同時變動!!

          • 已回信給你了, 下次範例請盡量弄的精簡或是把該附的 js 等等都一起提供。

          • 謝謝男丁老師,成功了!
            下次會注意讓檔案清楚點,謝謝:)

  2. 男丁老師你好!

    我想問一下 如果我要再頁籤裡的右邊放vedio,左邊插入表格做list,然後點選list讓他再右邊的vedio播放,這邊該如何實作呢??

    • 你現在能點 list 後播放影片了嗎?如果可以的話, 就直接把現在 list + 播放影片的 html 內容完整的放到 .tab_content li 中就可以了

    • 改寫成外掛的方式來使用是最方便的。若不知道怎麼改的話,那最簡單的方式就是取不同的 id,然後同樣的程式寫兩次~

  3. 男丁老師:我加入了連結在裡面,請問除了用同頁的方式來連結之外,我想要用 a href 的方式來連結,但是a頁面連結到b的那個頁面,本來b頁面設定繼續連結c的部份失效了。這是為什麼呢?

  4. 男丁老師,我在第22行的地方把click改成mouseover後,發現tab_content下的各個LI區域原本是相互貼合在切換,但在頁籤快速遊走的時候,會有越分越開的現象,我應該要怎麼修改?

發表迴響