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. 不好意思~雖然很多人問過了,但還是不太清楚該怎麼改~~
    如何把數字變成像你的"左右水平廣告輪播"一樣是用圖片方式呢?

    • 先找到

      檢視原始碼 JavaScript
      1
      2
      3
      
      for(var i=0;i<$ad.length;i++){
      	str += '<a href="#" rel="nofollow">' + (i + 1) + '</a>';
      }

      改成

      檢視原始碼 JavaScript
      1
      2
      3
      
      for(var i=0;i<$ad.length;i++){
      	str += '<a class="control_menu control_' + (i + 1) + '" href="#" rel="nofollow">' + (i + 1) + '</a>';
      }

      這樣你就能利用 css 去一一指定 a.control_1, a.control_2...的背景圖片了。

      • 抱歉,大大,我改了沒反應,看了看好像是我沒說清楚,我意思是指下面1.2.3.4變成圓點圖形,而不是數字,不知道你講解的是這意思嗎?

        • 如果要是一起變的話就改成

          檢視原始碼 JavaScript
          1
          2
          3
          
          for(var i=0;i<$ad.length;i++){
          	str += '<a class="control_menu control_' + (i + 1) + '" href="#" rel="nofollow">' + (i + 1) + '</a>';
          }

          然後你再仔細看"左右水平廣告輪播"文章的最後部份, 我有幫 li 指定背景圖片。所以這邊你也要幫 .control_menu 指定背景圖片才行~

          • 在請問一下,我幫#abgne_fade_pic .control a.control_menu {background: url(img/cir_ctrl.png) no-repeat 0 0;}加上背景圖了,但是數字仍是會存在
            我放在網上,可請大大幫我看一下問題出在哪??
            http://www.apex-pac.com/test1/test06.rar

          • #abgne_fade_pic .control a.control_menu {background: url(img/cir_ctrl.png) no-repeat 0 0; text-indent: -9999; }還是不行!!

            謝謝男丁老師,太麻煩你了,我想還是放棄好了,改別的方式吧!!

          • 如果可以的話, 就把完整的檔案(html,css,js,images)一起寄給我試~

          • text-indent: -9999px; 單位要加上去, 直接加在 #abgne_fade_pic .control a 中就可以

          • 嗚嗚~謝謝男丁老師,終於成功了!!
            你的盡心盡力教導真的很感動!!

  2. 不好意思,我是初學者,想做出淡入淡出輪播圖片,像以下這個連結上方的輪播方式,http://mulife.tw/,這是用flash作成的,如果要改變右下角的小圖改成自己的圖片,這種語法該怎麼寫?拜託您教教我!謝謝

    • 我看他網站沒什麼 flash 的內容哩@@
      不過以我範例來說, 只要改改 html 中的圖片內容就可以了, 當然相對應的 css 寬高也要一起改喔!

  3. 男丁大:

    關於上面有人問到圓點圖形,我也照上面改了

    可123按鈕是不見了,但是圓點還是出不來

    不太懂你說的"指定背景圖片"是要改哪裡

    那如果整張廣告要置中的話,要如何用呢??

    我有爬過前面文章,嘗試過了可是還是失敗

    謝謝!

    • 指定背景圖片就是用 css 去設定選項的 background-image
      整個廣告要置中的話, 通常就是把該區塊的 margin 設成 0 auto;

  4. 抱歉想問一下兩個問題
    第一:
    整個結構似乎不是如此簡單吧,似乎要倒入

    "jquery-latest.min.js"
    這個黨才能夠正常運作。
    問題2,可以不顯示右下角那三個方塊嗎,但不知道該怎麼更動,改了似乎沒辦法正常運作。

    • 可以把 href 改成 # 就可以了,
      若是要把超連結整個拿掉的話, 那麼程式中有 siblings('a') 的要改成 siblings('img')

  5. 老師您好:
    我是剛加入的會員,現在遇到一個問題是,我把這個淡入淡出效果改成,一張固定底圖+3張產品圖(png檔)在上面輪播,但在ie瀏覽都會有黑邊出現...在firefox & chrome 都是正常的,不知道要如何解決... (我想請老師幫我看原始碼.要怎麼寄給你?) 謝謝!

  6. 老師您好,我想請問一下有關版權的問題。
    此網站的範例是否可以移到任意網站上使用呢?
    或者是說有甚麼樣的限制。
    謝謝!

  7. 您好
    依舊是timer問題 當點選後下一張會很快跑掉
    我將fadeTo改用animate

    animate時間用fadeOutSpeed = 1000,
    fadeInSpeed = 1000,
    $ad.eq(showIndex).stop().animate({left:0},fadeInSpeed, function(){~~~~

    發現當點選後若沒有點頁面上#abgne_fade_pic區塊以外的範圍
    下一張會很快就跑掉
    這可能要從哪邊去修改呢?

發表迴響