Home » jQuery 應用

[jQ]用 jQuery 做廣告 – 淡入淡出式的切換影像

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

有同學問到能不能讓圖片的切換效果是溶入的方式?這樣的效果好像在 Flash 上是比較常見的,若真的要用 JavaScript 來做到溶入的話,可是會殺死設計師很多腦細胞的。所以,筆者就取巧的使用淡入淡出的方式來模擬它。

筆者這邊只用很簡單的 HTML 來展示圖片:

1
2
3
4
5
6
7
<body> 
	<div id="abgne_fade_pic"> 
		<a href="http://abgne.tw" class="ad"><img src="g01.jpg" /></a> 
		<a href="#" class="ad"><img src="g02.jpg" /></a> 
		<a href="#" class="ad"><img src="g03.jpg" /></a> 
	</div> 
</body>

接著透過 CSS 把超連結的 position 設成 absolute 來讓圖片能疊在一起:

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
a img {
	border: none;
}
#abgne_fade_pic {
	position: relative;
	width: 500px;
	height: 500px;
	border: 1px solid #ccc;
}
#abgne_fade_pic a.ad {
	position: absolute;	/* 讓圖片疊在一起 */
}
#abgne_fade_pic .control {
	position: absolute;
	right: 10px;
	bottom: 10px;
}
#abgne_fade_pic .control a {
	display: inline-block;
	padding: 3px;
	margin: 0 3px;
	width: 16px;
	color: #fff;
	background: #000;
	text-align: center;
	font-size: 16px;
	text-decoration: none;
}
#abgne_fade_pic .control a.on {
	font-weight: bold;
	color: #f00;
}

再來筆者會用程式去產生出相對應數量的按鈕:

檢視原始碼 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
$(function(){
	var $block = $('#abgne_fade_pic'), 
		$ad = $block.find('.ad'),
		showIndex = 0,			// 預設要先顯示那一張
		fadeOutSpeed = 2000,	// 淡出的速度
		fadeInSpeed = 3000,		// 淡入的速度
		defaultZ = 10;			// 預設的 z-index
 
	// 先把其它圖片的變成透明
	$ad.css({
		opacity: 0,
		zIndex: defaultZ - 1
	}).eq(showIndex).css({
		opacity: 1,
		zIndex: defaultZ
	});
 
	// 組出右下的按鈕
	var str = '';
	for(var i=0;i<$ad.length;i++){
		str += '<a href="#">' + (i + 1) + '</a>';
	}
	var $controlA = $('#abgne_fade_pic').append($('<div class="control">' + str + '</div>').css('zIndex', defaultZ + 1)).find('.control a');
 
	// 當按鈕被點選時
	// 若要變成滑鼠滑入來切換時, 可以把 click 換成 mouseover
	$controlA.click(function(){
		// 取得目前點擊的號碼
		showIndex = $(this).text() * 1 - 1;
 
		// 顯示相對應的區域並把其它區域變成透明
		$ad.eq(showIndex).stop().fadeTo(fadeInSpeed, 1).css('zIndex', defaultZ).siblings('a').stop().fadeTo(fadeOutSpeed, 0).css('zIndex', defaultZ - 1);
		// 讓 a 加上 .on
		$(this).addClass('on').siblings().removeClass('on');
 
		return false;
	}).focus(function(){
		$(this).blur();
	}).eq(showIndex).addClass('on');
});

這樣當使用者去點擊按鈕時就會把目前的圖片做淡出的動作,然後同時把相對應的圖片做淡入,因為圖片都疊一起,所以就會有影像重疊的錯覺出來:



最後如果需要讓它能自動輪播的話,就得再加上 setTimeout() 計時器來配合:

檢視原始碼 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
63
64
65
66
67
$(function(){
	var $block = $('#abgne_fade_pic'), 
		$ad = $block.find('.ad'),
		showIndex = 0,			// 預設要先顯示那一張
		fadeOutSpeed = 2000,	// 淡出的速度
		fadeInSpeed = 3000,		// 淡入的速度
		defaultZ = 10,			// 預設的 z-index
		isHover = false,
		timer, speed = 2000;	// 計時器及輪播切換的速度
 
	// 先把其它圖片的變成透明
	$ad.css({
		opacity: 0,
		zIndex: defaultZ - 1
	}).eq(showIndex).css({
		opacity: 1,
		zIndex: defaultZ
	});
 
	// 組出右下的按鈕
	var str = '';
	for(var i=0;i<$ad.length;i++){
		str += '<a href="#">' + (i + 1) + '</a>';
	}
	var $controlA = $('#abgne_fade_pic').append($('<div class="control">' + str + '</div>').css('zIndex', defaultZ + 1)).find('.control a');
 
	// 當按鈕被點選時
	// 若要變成滑鼠滑入來切換時, 可以把 click 換成 mouseover
	$controlA.click(function(){
		// 取得目前點擊的號碼
		showIndex = $(this).text() * 1 - 1;
 
		// 顯示相對應的區域並把其它區域變成透明
		$ad.eq(showIndex).stop().fadeTo(fadeInSpeed, 1, function(){
			if(!isHover){
				// 啟動計時器
				timer = setTimeout(autoClick, speed + fadeInSpeed);
			}
		}).css('zIndex', defaultZ).siblings('a').stop().fadeTo(fadeOutSpeed, 0).css('zIndex', defaultZ - 1);
		// 讓 a 加上 .on
		$(this).addClass('on').siblings().removeClass('on');
 
		return false;
	}).focus(function(){
		$(this).blur();
	}).eq(showIndex).addClass('on');
 
	$ad.hover(function(){
		isHover = true;
		// 停止計時器
		clearTimeout(timer);
	}, function(){
		isHover = false;
		// 啟動計時器
		timer = setTimeout(autoClick, speed);
	})
 
	// 自動點擊下一個
	function autoClick(){
		if(isHover) return;
		showIndex = (showIndex + 1) % $controlA.length;
		$controlA.eq(showIndex).click();
	}
 
	// 啟動計時器
	timer = setTimeout(autoClick, speed);
});
範例 1 範例 2 範例 3 範例 4

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

174 筆針對 [jQ]用 jQuery 做廣告 – 淡入淡出式的切換影像 的迴響

  1. 我想請問一下歐~

    請問你的下載連結裡,
    有一個"miroko"的,
    請問那個下載連結是怎麼取得的???

    我有miroko的帳戶,也上傳了東西,
    想讓大家下載用~~~

    請問是如何取得的咧????

    • 你有把該資料夾的分享模式設成"開放 任何帳號 讀取"嗎?
      可以對著個人首頁中的資料夾點右鍵->內容

  2. 比方您製作的範例二,我用Google Chrome開啟此效果沒有問題,
    但是用ie開啟,卻是靜止的不會動,按鈕也沒反應,
    我使用IE8,
    為什麼會這樣呢??IE8卡陰嗎....
    如果是卡陰,有沒有什麼符咒密語化解呢??

  3. 您好!! 我們因為專題的需要 想請教您問題
    關於此篇[jQ]用 jQuery 做廣告 - 淡入淡出式的切換影像
    此範例所嵌入的圖片,能否用資料庫(SQL2008)做傳接 ?
    因為在完成FLASH的BANNER時,USER要求要能去改圖片
    碰巧看到您所做的此篇範例,想改用範例寫寫看能不能達成USER的要求~

  4. 丁大!!我發現IE 8.0.7600版本就可以
    但是我的電腦目前版本為IE 8.0.6001就不能了。
    有沒有什麼補救的方式嗎??

發表迴響