一步一步教你寫帶圖片注釋的淡入淡出插件(三)
更新時間:2010年10月11日 22:13:19 作者:
接上一文,我們已經(jīng)實現(xiàn)了圖片的自動淡入淡出播放。接下來需要加入控制器。
其實憑借著之前良好的代碼結(jié)構(gòu),加入控制器很簡單(^_^這也就是為什么我說剛開始的架構(gòu)的代碼結(jié)構(gòu)很重要?。?
先說一下加入控制器的思路:
根據(jù)輪播元素的個數(shù)為每一個元素添加一個對應(yīng)的控制按鈕,(這里我直接用a標簽來做,考慮語義的話可以用ul或ol),考慮到書寫樣式的方便可以先create一個控制器父標簽,然后依次把每個控制按鈕append到控制器父標簽,再把父標簽append到我們的輪播模塊中就ok了。然后再為對應(yīng)的元素添加上對應(yīng)的css樣式即可
好了,說完思路,咱們動手開始,控制器的繪制應(yīng)該在init()中。所以我們可以這樣寫:
init:function(options){ //options參數(shù):id(必選):圖片列表父標簽id;auto(可選):自動運行時間;index(可選):開始的運行的圖片序號
var wp = H$(options.id), // 獲取圖片列表父元素
ul = H$$('ul',wp)[0], // 獲取
li = this.li = H$$('li',ul);
this.a = options.auto?options.auto:2; //自動運行間隔
this.index = options.position?options.position:0; //開始運行的圖片序號(從0開始)
this.l = li.length;
this.cur = this.z = 0; //當前顯示的圖片序號&&z-index變量
nav_wp = document.createElement('div'); //先建一個div作為控制器父標簽,你也可以用<ul>或<ol>來做,語義可能會更好,這里我就不改了
nav_wp.style.cssText = 'position:absolute;right:0;bottom:0;padding:8px 0;'; //為它設(shè)置樣式
/* ==加入淡入淡出功能 ==*/
for(var i=0;i<this.l;i++){
this.li[i].o = 100; //為每一個圖片都設(shè)置一個透明度變化量
this.li[i].style.opacity = this.li[i].o/100; //非IE用opacity即可
this.li[i].style.filter = 'alpha(opacity='+this.li[i].o+')'; //IE用濾鏡
/* == 繪制控制器 == */
var nav = document.createElement('a'); //這里我就直接用a標簽來做控制器,考慮語義的話你也可以用li
nav.className = options.navClass?options.navClass:'fader-nav'; //控制器class,默認為'fader-nav'
nav.innerHTML = i+1;
nav.onclick = new Function(this.anchor+'.pos('+i+')'); //綁定onclick事件,直接調(diào)用之前寫好的pos()函數(shù)
nav_wp.appendChild(nav);
}
wp.appendChild(nav_wp); //控制器append到頁面
this.pos(this.index); //變換函數(shù)
},
上面的代碼即是加入控制器后的完整init(),總共也就增加了7行代碼。
寫到這里,可能有朋友會著急去試了,結(jié)果發(fā)現(xiàn)根本看不到自己添進去的控制器。。。
呵呵,別忘了,我們是用z-index來控制圖片顯隱的,別人的z-index從一開始就不斷的一個一個增加,而控制器一建出來默認的z-index只是0,當然不可能顯示出來。所以我們還得再加一行代碼來控制這個控制器的z-index。好讓它始終處于輪播元素之上。
所以,在變換函數(shù)pos()中,
pos:function(i){
clearInterval(this.li.a); //清除自動變換計時器
clearInterval(this.li[i].f); //清除淡入淡出效果計時器
this.z++;
this.li[i].style.zIndex = this.z; //每次讓下一張圖片z-index加一
nav_wp.style.zIndex = this.z+1; //控制器z-index要始終比輪播元素z-index最大的那個還大1
this.cur = i; //綁定當前顯示圖片的正確序號
this.li.a = false; //做一個標記,下面要用到,表示清除計時器已經(jīng)完成
//this.auto(); //自動運行
if(this.li[i].o>=100){ //在圖片淡入之前先把圖片透明度置為透明
this.li[i].o = 0;
this.li[i].style.opacity = 0;
this.li[i].style.filter = 'alpha(opacity=0)';
}
this.li[i].f = setInterval(new Function(this.anchor+'.fade('+i+')'),20);
},
上面的代碼其實也就加了一句,在第6行。
有了這添加的8句話,再加上相應(yīng)的css,控制器就初見雛形了??刂破鱟ss是這樣的
看下雛形效果吧。
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
發(fā)現(xiàn)了吧,咱們還缺個控制器當前的樣式。所以還要添兩句,一句添在init()中
this.curC = options.curNavClass?options.curNavClass:'fader-cur-nav'; //定義控制器當前樣式變量,在pos()中把它賦給對應(yīng)的那一個
在pos()中:
for(var x=0;x<this.l;x++){
nav_wp.getElementsByTagName('a')[x].className = x==i?this.curC:'fader-nav'; //綁定當前控制器樣式
}
這樣就ok了,另外再加上當前狀態(tài)的css樣式:
.fader-cur-nav{display:inline-block;margin-right:8px;color:#fff;padding:2px 6px;background:#ff7a00;border:1px solid #fff;font-family:Tahoma;font-weight:bold;font-size:12px;cursor:pointer;}
好了,這下基本上可以了,再看看效果:
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
恩,好了,上面這個效果其實大多數(shù)情況下已經(jīng)夠用了,不過有朋友有更多需求,想在底部加一個圖片備注的層,這一個功能在下一部分實現(xiàn)吧!
先說一下加入控制器的思路:
根據(jù)輪播元素的個數(shù)為每一個元素添加一個對應(yīng)的控制按鈕,(這里我直接用a標簽來做,考慮語義的話可以用ul或ol),考慮到書寫樣式的方便可以先create一個控制器父標簽,然后依次把每個控制按鈕append到控制器父標簽,再把父標簽append到我們的輪播模塊中就ok了。然后再為對應(yīng)的元素添加上對應(yīng)的css樣式即可
好了,說完思路,咱們動手開始,控制器的繪制應(yīng)該在init()中。所以我們可以這樣寫:
復(fù)制代碼 代碼如下:
init:function(options){ //options參數(shù):id(必選):圖片列表父標簽id;auto(可選):自動運行時間;index(可選):開始的運行的圖片序號
var wp = H$(options.id), // 獲取圖片列表父元素
ul = H$$('ul',wp)[0], // 獲取
li = this.li = H$$('li',ul);
this.a = options.auto?options.auto:2; //自動運行間隔
this.index = options.position?options.position:0; //開始運行的圖片序號(從0開始)
this.l = li.length;
this.cur = this.z = 0; //當前顯示的圖片序號&&z-index變量
nav_wp = document.createElement('div'); //先建一個div作為控制器父標簽,你也可以用<ul>或<ol>來做,語義可能會更好,這里我就不改了
nav_wp.style.cssText = 'position:absolute;right:0;bottom:0;padding:8px 0;'; //為它設(shè)置樣式
/* ==加入淡入淡出功能 ==*/
for(var i=0;i<this.l;i++){
this.li[i].o = 100; //為每一個圖片都設(shè)置一個透明度變化量
this.li[i].style.opacity = this.li[i].o/100; //非IE用opacity即可
this.li[i].style.filter = 'alpha(opacity='+this.li[i].o+')'; //IE用濾鏡
/* == 繪制控制器 == */
var nav = document.createElement('a'); //這里我就直接用a標簽來做控制器,考慮語義的話你也可以用li
nav.className = options.navClass?options.navClass:'fader-nav'; //控制器class,默認為'fader-nav'
nav.innerHTML = i+1;
nav.onclick = new Function(this.anchor+'.pos('+i+')'); //綁定onclick事件,直接調(diào)用之前寫好的pos()函數(shù)
nav_wp.appendChild(nav);
}
wp.appendChild(nav_wp); //控制器append到頁面
this.pos(this.index); //變換函數(shù)
},
上面的代碼即是加入控制器后的完整init(),總共也就增加了7行代碼。
寫到這里,可能有朋友會著急去試了,結(jié)果發(fā)現(xiàn)根本看不到自己添進去的控制器。。。
呵呵,別忘了,我們是用z-index來控制圖片顯隱的,別人的z-index從一開始就不斷的一個一個增加,而控制器一建出來默認的z-index只是0,當然不可能顯示出來。所以我們還得再加一行代碼來控制這個控制器的z-index。好讓它始終處于輪播元素之上。
所以,在變換函數(shù)pos()中,
復(fù)制代碼 代碼如下:
pos:function(i){
clearInterval(this.li.a); //清除自動變換計時器
clearInterval(this.li[i].f); //清除淡入淡出效果計時器
this.z++;
this.li[i].style.zIndex = this.z; //每次讓下一張圖片z-index加一
nav_wp.style.zIndex = this.z+1; //控制器z-index要始終比輪播元素z-index最大的那個還大1
this.cur = i; //綁定當前顯示圖片的正確序號
this.li.a = false; //做一個標記,下面要用到,表示清除計時器已經(jīng)完成
//this.auto(); //自動運行
if(this.li[i].o>=100){ //在圖片淡入之前先把圖片透明度置為透明
this.li[i].o = 0;
this.li[i].style.opacity = 0;
this.li[i].style.filter = 'alpha(opacity=0)';
}
this.li[i].f = setInterval(new Function(this.anchor+'.fade('+i+')'),20);
},
上面的代碼其實也就加了一句,在第6行。
有了這添加的8句話,再加上相應(yīng)的css,控制器就初見雛形了??刂破鱟ss是這樣的
復(fù)制代碼 代碼如下:
.fader-nav{display:inline-block;margin-right:8px;color:#fff;padding:2px 6px;background:#333;border:1px solid #fff;font-family:Tahoma;font-weight:bold;font-size:12px;cursor:pointer;}
看下雛形效果吧。
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
發(fā)現(xiàn)了吧,咱們還缺個控制器當前的樣式。所以還要添兩句,一句添在init()中
this.curC = options.curNavClass?options.curNavClass:'fader-cur-nav'; //定義控制器當前樣式變量,在pos()中把它賦給對應(yīng)的那一個
在pos()中:
for(var x=0;x<this.l;x++){
nav_wp.getElementsByTagName('a')[x].className = x==i?this.curC:'fader-nav'; //綁定當前控制器樣式
}
這樣就ok了,另外再加上當前狀態(tài)的css樣式:
.fader-cur-nav{display:inline-block;margin-right:8px;color:#fff;padding:2px 6px;background:#ff7a00;border:1px solid #fff;font-family:Tahoma;font-weight:bold;font-size:12px;cursor:pointer;}
好了,這下基本上可以了,再看看效果:
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
恩,好了,上面這個效果其實大多數(shù)情況下已經(jīng)夠用了,不過有朋友有更多需求,想在底部加一個圖片備注的層,這一個功能在下一部分實現(xiàn)吧!
相關(guān)文章
JavaScript中利用for循環(huán)遍歷數(shù)組
這篇文章主要為大家詳細介紹了JavaScript中利用for循環(huán)遍歷數(shù)組,最好不要使用for in遍歷,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-01-01JavaScript數(shù)據(jù)結(jié)構(gòu)之鏈表的實現(xiàn)
鏈表是一種常見的數(shù)據(jù)結(jié)構(gòu)。它是動態(tài)地進行存儲分配的一種結(jié)構(gòu)。本文主要介紹JavaScript數(shù)據(jù)結(jié)構(gòu)中鏈表的實現(xiàn),具有很好的參考價值。下面跟著小編一起來看下吧2017-03-03JS中數(shù)據(jù)結(jié)構(gòu)與算法---排序算法(Sort Algorithm)實例詳解
排序也稱排序算法 (Sort Algorithm),排序是將 一組數(shù)據(jù) , 依指定的順序 進行 排列的過程 。這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu)與算法---排序算法(Sort Algorithm),需要的朋友可以參考下2019-06-06