[js外掛開發教程]實現一個比較完整的開源級選項卡外掛
在這篇文章中,我實現了一個基本的選項卡功能:請猛擊後面的連結>> [js外掛開發教程]原生js仿jquery架構擴充套件開發選項卡外掛.
還缺少兩個常用的切換(自動切換與透明度漸變),當然有朋友會說,還有左右,上下等等,這些動畫會放在焦點圖(幻燈片)外掛系列.
(自動切換,停止控制,透明度漸變 ) 效果預覽:
自動切換的實現:
這個思路很簡單,開啟定時器,讓選項卡的索引+1,加到4的時候(選項卡的長度)從0開始
傳統做法:
index = 0
index++
if ( index == 4 ) {
index = 0
}
小技巧(估計很多人都沒有用過):
var i = ( index + 1 ) % 4
index為當前選中的選項卡 索引
當index = 0,他下一張就是1, 通過上面的取餘操作,i = 1
當index = 3,他下一張就是0, 通過上面的取餘操作,i = 0
這種方法不需要判斷邊界,只需要一句程式碼。在實際開發中,把那個4替換成選項卡的長度
好了,關鍵的思路和技巧有了,我們開始拼接框架了:成華區做陰莖延長手術好的醫院
1 var defaults = {
2 contentClass : 'tab-content',
3 navClass : 'tab-nav',
4 activeClass : 'active',
5 triggerElements : '*',
6 activeIndex : 0,
7 evType : 'click',
8 effect : 'none',
9 auto : false,
10 delay : 3000,
11 duration : 1000
12 };
defaults引數,增加幾個配置:
effect: none(沒有特效) / fade( 透明度切換 )
auto: false(不會自動切換) / true ( 開啟自動切換 )
delay : 多少時間 切換一個選項卡
duration: 透明度開啟,這個才會用到,表示,多長時間內 完成透明度的切換
1 if ( options.effect == 'fade' ) {
2 tabContent.style.position = 'relative';
3 for( var i = 0; i < tabContentEle.length; i++ ) {
4 tabContentEle[i].style.position = 'absolute';
5 }
6 tabContentEle[opt.activeIndex].style.zIndex = _contentLen + 1;
7 opt.delay += opt.duration;
8 }
當開啟透明度變化的時候,把選項卡元素設定成定位方式,當前選中的選項卡,層級為最高!!! ( 如果不是最高層級,那麼預設是最後一個選項卡在最上面,所以 “內容4” 就會在最上層,顯然不是我們想要的結果)層級+定位 這一招也很常用,經常用來做顯示隱藏,和透明度變化.成都治陽痿大概多少錢
根據opt配置,判斷是否開啟了auto自動切換功能
1 //是否自動播放
2 if ( opt.auto ) {
3 for( var i = 0 ; i < tabNavEle.length; i++ ){
4 tabNavEle[i].index = i;
5 tabNavEle[i].onmouseover = function(){
6 _api.stop();
7 _api.setIndex( this.index );
8 };
9 tabNavEle[i].onmouseout = function(){
10 _api.start();
11 _api.setIndex( this.index );
12 };
13 }
14 _api.start();
15 }
如果開啟了,做兩件事情:
1,呼叫start()函式,讓索引+1
2,選項卡導航部分,新增事件控制 自動播放的暫停和開始
start與stop方法?
1 _api.stop = function(){
2 timer && clearInterval( timer );
3 };
4
5 _api.start = function(){
6 _api.stop();
7 timer = setInterval( function(){
8 _api.next();
9 }, opt.delay );
10 };
呼叫next方法,你應該猜得到next方法做的事情就是索引+1 吧
1 _api.next = function(){
2 var i = ( _index + 1 ) % _contentLen;
3 _api.setIndex( i );
4 };
索引+1之後,再切換選項卡
最後在setIndex方法:增加透明度變化
2 tabContentEle[_index].style.zIndex = _contentLen + 1;
3 for (var i = 0; i < tabContentEle.length; i++) {
4 if (i != _index) {
5 tabContentEle[i].style.zIndex = ( index + _contentLen - ( i + 1 ) ) % _contentLen + 1;
6 tabContentEle[i].style.opacity = 1;
7 }
8 }
9 animate(tabContentEle[_index], {'opacity': 0}, function () {
10 tabContentEle[_index].style.zIndex = ( index + _contentLen - ( _index + 1 ) ) % _contentLen + 1;
11 _index = index;
12 });
13 }
完整的js程式碼有220行:作者:ghostwu, 出處:http://www.cnblogs.com/ghostwu