有同學問到能不能讓圖片的切換效果是溶入的方式?這樣的效果好像在 Flash 上是比較常見的,若真的要用 JavaScript 來做到溶入的話,可是會殺死設計師很多腦細胞的。所以,筆者就取巧的使用淡入淡出的方式來模擬它。
筆者這邊只用很簡單的 HTML 來展示圖片:
檢視原始碼 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 來讓圖片能疊在一起:
檢視原始碼 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 | 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); }); |
Hi 您好 :
謝謝您分享提供,但是測試之後發現一問題,就是在Google Chrome瀏覽器讀取之後
本來網頁上頭有一橫排按鈕是屬於下拉式隱藏選單,但是會被特效的圖檔所遮蔽到!!
原先我是用Flash做的圖檔後來有加入一串語法才不會被遮住!
但是關於所提供的特效該如何解決呢?
請求協助 ...TKS.
如果將下拉式選單的css設定成
z-index:100
應該就不會被遮住了
個人經驗
男老師 您好 :
我將分享的效果加入之後再IE8瀏覽都沒問題,唯讀在Google Chrome和Firefox的瀏覽器讀取網頁時發現我原本在網頁上的下拉式選單被底下的圖片特效遮到了!?
請問該如何修正!
盼請回覆 ~
可以幫我做一個div的背景自動淡入淡出的效果嗎? 範例 http://www.bigsun-energy.com/ ,你的帳號連結匯錢的網頁失效了?
無法匯錢進入
如果是要贊助的話, 只要登入後再進入到 http://abgne.tw/memcp#sponsor 就可以了
同時也寄一個類似的範例給你參考看看
男大,請問在同一頁上,放上兩組廣告該甚麼做?
如果不會使用 .each() 的話
最簡單的就是 id 命名不一樣, 然後 css 也要搭配修改
接著就是程式 copy 兩份, 再分別修改 id
謝謝男大的回覆!我再研究一下!
男丁大,小弟用了您寫的這篇淡入淡出圖片,
完成後發現一個問題,上排的下拉式選單會被圖片蓋過耶...qq
詳請見圖:http://i.imm.io/1gsha.jpeg
請問這有辦法修改嗎qq??
請問此功能在首頁的話,點選其他頁面後,在回到首頁就會出現到最後一張圖且123按鈕也不見了,也不會輪撥了,但按F5,所有功能又正常,請問是什麼原因呢
有網址可以看看嗎?
老師您好,
套用您的範例後, 我們網站首頁在Firefox及ie都可成功展現美觀的廣告圖片功能,
但是在chrome瀏覽, 圖片和數字會分開, 無法疊在一起,
網址如下
http://www.b-bigs.com/main.html
請問您是否能協助修正?
謝謝!!
為什麼我試著把圖放成4張
script插進後
4張圖都不見了??謝謝
HI~老師您好~~
有關此範例真的很好用~不過想試試看此範例套用在整個視窗的圖片切換
但不想有卷軸~且圖片可置中~因為大背景寬度太大~此div都一定會有卷軸耶~
這部份要如加入寫呢!?
老師你好
這個可以搭配 rwd 嗎? 我想要把數字拿掉該怎麼用?
謝謝